1/*
2 * Copyright 2004-2022 The OpenSSL Project Authors. All Rights Reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     https://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17/*
18 * Portions Copyright (c) 2022 Tino Reichardt <milky-zfs@mcmilk.de>
19 * - modified assembly to fit into OpenZFS
20 */
21
22#if (defined(__PPC64__) && defined(__BIG_ENDIAN__))
23
24.text
25
26.globl	zfs_sha512_ppc
27.globl	.zfs_sha512_ppc
28.type	zfs_sha512_ppc,@function
29.section	".opd","aw"
30.align	3
31zfs_sha512_ppc:
32.quad	.zfs_sha512_ppc,.TOC.@tocbase,0
33.previous
34.align	6
35.zfs_sha512_ppc:
36	stdu	1,-384(1)
37	mflr	0
38	sldi	5,5,7
39
40	std	3,208(1)
41
42	std	14,240(1)
43	std	15,248(1)
44	std	16,256(1)
45	std	17,264(1)
46	std	18,272(1)
47	std	19,280(1)
48	std	20,288(1)
49	std	21,296(1)
50	std	22,304(1)
51	std	23,312(1)
52	std	24,320(1)
53	std	25,328(1)
54	std	26,336(1)
55	std	27,344(1)
56	std	28,352(1)
57	std	29,360(1)
58	std	30,368(1)
59	std	31,376(1)
60	std	0,400(1)
61	ld	8,0(3)
62	mr	31,4
63	ld	9,8(3)
64	ld	10,16(3)
65	ld	11,24(3)
66	ld	12,32(3)
67	ld	6,40(3)
68	ld	14,48(3)
69	ld	15,56(3)
70	bl	.LPICmeup
71.LPICedup:
72	andi.	0,31,3
73	bne	.Lunaligned
74.Laligned:
75	add	5,31,5
76	std	5,192(1)
77	std	31,200(1)
78	bl	.Lsha2_block_private
79	b	.Ldone
80
81
82
83
84
85
86
87.align	4
88.Lunaligned:
89	subfic	0,31,4096
90	andi.	0,0,3968
91	beq	.Lcross_page
92	cmpld	5,0
93	ble	.Laligned
94	subfc	5,0,5
95	add	0,31,0
96	std	5,184(1)
97	std	0,192(1)
98	std	31,200(1)
99	bl	.Lsha2_block_private
100
101	ld	5,184(1)
102.Lcross_page:
103	li	0,32
104	mtctr	0
105	addi	20,1,48
106.Lmemcpy:
107	lbz	16,0(31)
108	lbz	17,1(31)
109	lbz	18,2(31)
110	lbz	19,3(31)
111	addi	31,31,4
112	stb	16,0(20)
113	stb	17,1(20)
114	stb	18,2(20)
115	stb	19,3(20)
116	addi	20,20,4
117	bdnz	.Lmemcpy
118	std	31,176(1)
119	addi	0,1,176
120	addi	31,1,48
121	std	5,184(1)
122	std	0,192(1)
123	std	31,200(1)
124	bl	.Lsha2_block_private
125	ld	31,176(1)
126	ld	5,184(1)
127	addic.	5,5,-128
128	bne	.Lunaligned
129
130.Ldone:
131	ld	0,400(1)
132	ld	14,240(1)
133	ld	15,248(1)
134	ld	16,256(1)
135	ld	17,264(1)
136	ld	18,272(1)
137	ld	19,280(1)
138	ld	20,288(1)
139	ld	21,296(1)
140	ld	22,304(1)
141	ld	23,312(1)
142	ld	24,320(1)
143	ld	25,328(1)
144	ld	26,336(1)
145	ld	27,344(1)
146	ld	28,352(1)
147	ld	29,360(1)
148	ld	30,368(1)
149	ld	31,376(1)
150	mtlr	0
151	addi	1,1,384
152	blr
153.long	0
154.byte	0,12,4,1,0x80,18,3,0
155.long	0
156.align	4
157.Lsha2_block_private:
158	ld	0,0(7)
159	lwz	5,0(31)
160	lwz	16,4(31)
161	insrdi	16,5,32,0
162	rotrdi	3,12,14
163	rotrdi	4,12,18
164	and	5,6,12
165	xor	3,3,4
166	add	15,15,0
167	andc	0,14,12
168	rotrdi	4,4,23
169	or	5,5,0
170	add	15,15,16
171	xor	3,3,4
172	add	15,15,5
173	add	15,15,3
174
175	rotrdi	3,8,28
176	rotrdi	4,8,34
177	and	5,8,9
178	and	0,8,10
179	xor	3,3,4
180	rotrdi	4,4,5
181	xor	5,5,0
182	and	0,9,10
183	xor	3,3,4
184	add	11,11,15
185	xor	5,5,0
186	ld	0,8(7)
187	add	15,15,3
188	add	15,15,5
189
190	lwz	5,8(31)
191	lwz	17,12(31)
192	insrdi	17,5,32,0
193	rotrdi	3,11,14
194	rotrdi	4,11,18
195	and	5,12,11
196	xor	3,3,4
197	add	14,14,0
198	andc	0,6,11
199	rotrdi	4,4,23
200	or	5,5,0
201	add	14,14,17
202	xor	3,3,4
203	add	14,14,5
204	add	14,14,3
205
206	rotrdi	3,15,28
207	rotrdi	4,15,34
208	and	5,15,8
209	and	0,15,9
210	xor	3,3,4
211	rotrdi	4,4,5
212	xor	5,5,0
213	and	0,8,9
214	xor	3,3,4
215	add	10,10,14
216	xor	5,5,0
217	ld	0,16(7)
218	add	14,14,3
219	add	14,14,5
220
221	lwz	5,16(31)
222	lwz	18,20(31)
223	insrdi	18,5,32,0
224	rotrdi	3,10,14
225	rotrdi	4,10,18
226	and	5,11,10
227	xor	3,3,4
228	add	6,6,0
229	andc	0,12,10
230	rotrdi	4,4,23
231	or	5,5,0
232	add	6,6,18
233	xor	3,3,4
234	add	6,6,5
235	add	6,6,3
236
237	rotrdi	3,14,28
238	rotrdi	4,14,34
239	and	5,14,15
240	and	0,14,8
241	xor	3,3,4
242	rotrdi	4,4,5
243	xor	5,5,0
244	and	0,15,8
245	xor	3,3,4
246	add	9,9,6
247	xor	5,5,0
248	ld	0,24(7)
249	add	6,6,3
250	add	6,6,5
251
252	lwz	5,24(31)
253	lwz	19,28(31)
254	insrdi	19,5,32,0
255	rotrdi	3,9,14
256	rotrdi	4,9,18
257	and	5,10,9
258	xor	3,3,4
259	add	12,12,0
260	andc	0,11,9
261	rotrdi	4,4,23
262	or	5,5,0
263	add	12,12,19
264	xor	3,3,4
265	add	12,12,5
266	add	12,12,3
267
268	rotrdi	3,6,28
269	rotrdi	4,6,34
270	and	5,6,14
271	and	0,6,15
272	xor	3,3,4
273	rotrdi	4,4,5
274	xor	5,5,0
275	and	0,14,15
276	xor	3,3,4
277	add	8,8,12
278	xor	5,5,0
279	ld	0,32(7)
280	add	12,12,3
281	add	12,12,5
282
283	lwz	5,32(31)
284	lwz	20,36(31)
285	insrdi	20,5,32,0
286	rotrdi	3,8,14
287	rotrdi	4,8,18
288	and	5,9,8
289	xor	3,3,4
290	add	11,11,0
291	andc	0,10,8
292	rotrdi	4,4,23
293	or	5,5,0
294	add	11,11,20
295	xor	3,3,4
296	add	11,11,5
297	add	11,11,3
298
299	rotrdi	3,12,28
300	rotrdi	4,12,34
301	and	5,12,6
302	and	0,12,14
303	xor	3,3,4
304	rotrdi	4,4,5
305	xor	5,5,0
306	and	0,6,14
307	xor	3,3,4
308	add	15,15,11
309	xor	5,5,0
310	ld	0,40(7)
311	add	11,11,3
312	add	11,11,5
313
314	lwz	5,40(31)
315	lwz	21,44(31)
316	insrdi	21,5,32,0
317	rotrdi	3,15,14
318	rotrdi	4,15,18
319	and	5,8,15
320	xor	3,3,4
321	add	10,10,0
322	andc	0,9,15
323	rotrdi	4,4,23
324	or	5,5,0
325	add	10,10,21
326	xor	3,3,4
327	add	10,10,5
328	add	10,10,3
329
330	rotrdi	3,11,28
331	rotrdi	4,11,34
332	and	5,11,12
333	and	0,11,6
334	xor	3,3,4
335	rotrdi	4,4,5
336	xor	5,5,0
337	and	0,12,6
338	xor	3,3,4
339	add	14,14,10
340	xor	5,5,0
341	ld	0,48(7)
342	add	10,10,3
343	add	10,10,5
344
345	lwz	5,48(31)
346	lwz	22,52(31)
347	insrdi	22,5,32,0
348	rotrdi	3,14,14
349	rotrdi	4,14,18
350	and	5,15,14
351	xor	3,3,4
352	add	9,9,0
353	andc	0,8,14
354	rotrdi	4,4,23
355	or	5,5,0
356	add	9,9,22
357	xor	3,3,4
358	add	9,9,5
359	add	9,9,3
360
361	rotrdi	3,10,28
362	rotrdi	4,10,34
363	and	5,10,11
364	and	0,10,12
365	xor	3,3,4
366	rotrdi	4,4,5
367	xor	5,5,0
368	and	0,11,12
369	xor	3,3,4
370	add	6,6,9
371	xor	5,5,0
372	ld	0,56(7)
373	add	9,9,3
374	add	9,9,5
375
376	lwz	5,56(31)
377	lwz	23,60(31)
378	insrdi	23,5,32,0
379	rotrdi	3,6,14
380	rotrdi	4,6,18
381	and	5,14,6
382	xor	3,3,4
383	add	8,8,0
384	andc	0,15,6
385	rotrdi	4,4,23
386	or	5,5,0
387	add	8,8,23
388	xor	3,3,4
389	add	8,8,5
390	add	8,8,3
391
392	rotrdi	3,9,28
393	rotrdi	4,9,34
394	and	5,9,10
395	and	0,9,11
396	xor	3,3,4
397	rotrdi	4,4,5
398	xor	5,5,0
399	and	0,10,11
400	xor	3,3,4
401	add	12,12,8
402	xor	5,5,0
403	ld	0,64(7)
404	add	8,8,3
405	add	8,8,5
406
407	lwz	5,64(31)
408	lwz	24,68(31)
409	insrdi	24,5,32,0
410	rotrdi	3,12,14
411	rotrdi	4,12,18
412	and	5,6,12
413	xor	3,3,4
414	add	15,15,0
415	andc	0,14,12
416	rotrdi	4,4,23
417	or	5,5,0
418	add	15,15,24
419	xor	3,3,4
420	add	15,15,5
421	add	15,15,3
422
423	rotrdi	3,8,28
424	rotrdi	4,8,34
425	and	5,8,9
426	and	0,8,10
427	xor	3,3,4
428	rotrdi	4,4,5
429	xor	5,5,0
430	and	0,9,10
431	xor	3,3,4
432	add	11,11,15
433	xor	5,5,0
434	ld	0,72(7)
435	add	15,15,3
436	add	15,15,5
437
438	lwz	5,72(31)
439	lwz	25,76(31)
440	insrdi	25,5,32,0
441	rotrdi	3,11,14
442	rotrdi	4,11,18
443	and	5,12,11
444	xor	3,3,4
445	add	14,14,0
446	andc	0,6,11
447	rotrdi	4,4,23
448	or	5,5,0
449	add	14,14,25
450	xor	3,3,4
451	add	14,14,5
452	add	14,14,3
453
454	rotrdi	3,15,28
455	rotrdi	4,15,34
456	and	5,15,8
457	and	0,15,9
458	xor	3,3,4
459	rotrdi	4,4,5
460	xor	5,5,0
461	and	0,8,9
462	xor	3,3,4
463	add	10,10,14
464	xor	5,5,0
465	ld	0,80(7)
466	add	14,14,3
467	add	14,14,5
468
469	lwz	5,80(31)
470	lwz	26,84(31)
471	insrdi	26,5,32,0
472	rotrdi	3,10,14
473	rotrdi	4,10,18
474	and	5,11,10
475	xor	3,3,4
476	add	6,6,0
477	andc	0,12,10
478	rotrdi	4,4,23
479	or	5,5,0
480	add	6,6,26
481	xor	3,3,4
482	add	6,6,5
483	add	6,6,3
484
485	rotrdi	3,14,28
486	rotrdi	4,14,34
487	and	5,14,15
488	and	0,14,8
489	xor	3,3,4
490	rotrdi	4,4,5
491	xor	5,5,0
492	and	0,15,8
493	xor	3,3,4
494	add	9,9,6
495	xor	5,5,0
496	ld	0,88(7)
497	add	6,6,3
498	add	6,6,5
499
500	lwz	5,88(31)
501	lwz	27,92(31)
502	insrdi	27,5,32,0
503	rotrdi	3,9,14
504	rotrdi	4,9,18
505	and	5,10,9
506	xor	3,3,4
507	add	12,12,0
508	andc	0,11,9
509	rotrdi	4,4,23
510	or	5,5,0
511	add	12,12,27
512	xor	3,3,4
513	add	12,12,5
514	add	12,12,3
515
516	rotrdi	3,6,28
517	rotrdi	4,6,34
518	and	5,6,14
519	and	0,6,15
520	xor	3,3,4
521	rotrdi	4,4,5
522	xor	5,5,0
523	and	0,14,15
524	xor	3,3,4
525	add	8,8,12
526	xor	5,5,0
527	ld	0,96(7)
528	add	12,12,3
529	add	12,12,5
530
531	lwz	5,96(31)
532	lwz	28,100(31)
533	insrdi	28,5,32,0
534	rotrdi	3,8,14
535	rotrdi	4,8,18
536	and	5,9,8
537	xor	3,3,4
538	add	11,11,0
539	andc	0,10,8
540	rotrdi	4,4,23
541	or	5,5,0
542	add	11,11,28
543	xor	3,3,4
544	add	11,11,5
545	add	11,11,3
546
547	rotrdi	3,12,28
548	rotrdi	4,12,34
549	and	5,12,6
550	and	0,12,14
551	xor	3,3,4
552	rotrdi	4,4,5
553	xor	5,5,0
554	and	0,6,14
555	xor	3,3,4
556	add	15,15,11
557	xor	5,5,0
558	ld	0,104(7)
559	add	11,11,3
560	add	11,11,5
561
562	lwz	5,104(31)
563	lwz	29,108(31)
564	insrdi	29,5,32,0
565	rotrdi	3,15,14
566	rotrdi	4,15,18
567	and	5,8,15
568	xor	3,3,4
569	add	10,10,0
570	andc	0,9,15
571	rotrdi	4,4,23
572	or	5,5,0
573	add	10,10,29
574	xor	3,3,4
575	add	10,10,5
576	add	10,10,3
577
578	rotrdi	3,11,28
579	rotrdi	4,11,34
580	and	5,11,12
581	and	0,11,6
582	xor	3,3,4
583	rotrdi	4,4,5
584	xor	5,5,0
585	and	0,12,6
586	xor	3,3,4
587	add	14,14,10
588	xor	5,5,0
589	ld	0,112(7)
590	add	10,10,3
591	add	10,10,5
592
593	lwz	5,112(31)
594	lwz	30,116(31)
595	insrdi	30,5,32,0
596	rotrdi	3,14,14
597	rotrdi	4,14,18
598	and	5,15,14
599	xor	3,3,4
600	add	9,9,0
601	andc	0,8,14
602	rotrdi	4,4,23
603	or	5,5,0
604	add	9,9,30
605	xor	3,3,4
606	add	9,9,5
607	add	9,9,3
608
609	rotrdi	3,10,28
610	rotrdi	4,10,34
611	and	5,10,11
612	and	0,10,12
613	xor	3,3,4
614	rotrdi	4,4,5
615	xor	5,5,0
616	and	0,11,12
617	xor	3,3,4
618	add	6,6,9
619	xor	5,5,0
620	ld	0,120(7)
621	add	9,9,3
622	add	9,9,5
623
624	lwz	5,120(31)
625	lwz	31,124(31)
626	insrdi	31,5,32,0
627	rotrdi	3,6,14
628	rotrdi	4,6,18
629	and	5,14,6
630	xor	3,3,4
631	add	8,8,0
632	andc	0,15,6
633	rotrdi	4,4,23
634	or	5,5,0
635	add	8,8,31
636	xor	3,3,4
637	add	8,8,5
638	add	8,8,3
639
640	rotrdi	3,9,28
641	rotrdi	4,9,34
642	and	5,9,10
643	and	0,9,11
644	xor	3,3,4
645	rotrdi	4,4,5
646	xor	5,5,0
647	and	0,10,11
648	xor	3,3,4
649	add	12,12,8
650	xor	5,5,0
651	add	8,8,3
652	add	8,8,5
653
654	li	5,4
655	mtctr	5
656.align	4
657.Lrounds:
658	addi	7,7,128
659	rotrdi	3,17,1
660	rotrdi	4,17,8
661	rotrdi	5,30,19
662	rotrdi	0,30,61
663	xor	3,3,4
664	srdi	4,17,7
665	xor	5,5,0
666	srdi	0,30,6
667	add	16,16,25
668	xor	3,3,4
669	xor	5,5,0
670	ld	0,0(7)
671	add	16,16,3
672	add	16,16,5
673	rotrdi	3,12,14
674	rotrdi	4,12,18
675	and	5,6,12
676	xor	3,3,4
677	add	15,15,0
678	andc	0,14,12
679	rotrdi	4,4,23
680	or	5,5,0
681	add	15,15,16
682	xor	3,3,4
683	add	15,15,5
684	add	15,15,3
685
686	rotrdi	3,8,28
687	rotrdi	4,8,34
688	and	5,8,9
689	and	0,8,10
690	xor	3,3,4
691	rotrdi	4,4,5
692	xor	5,5,0
693	and	0,9,10
694	xor	3,3,4
695	add	11,11,15
696	xor	5,5,0
697	add	15,15,3
698	add	15,15,5
699
700	rotrdi	3,18,1
701	rotrdi	4,18,8
702	rotrdi	5,31,19
703	rotrdi	0,31,61
704	xor	3,3,4
705	srdi	4,18,7
706	xor	5,5,0
707	srdi	0,31,6
708	add	17,17,26
709	xor	3,3,4
710	xor	5,5,0
711	ld	0,8(7)
712	add	17,17,3
713	add	17,17,5
714	rotrdi	3,11,14
715	rotrdi	4,11,18
716	and	5,12,11
717	xor	3,3,4
718	add	14,14,0
719	andc	0,6,11
720	rotrdi	4,4,23
721	or	5,5,0
722	add	14,14,17
723	xor	3,3,4
724	add	14,14,5
725	add	14,14,3
726
727	rotrdi	3,15,28
728	rotrdi	4,15,34
729	and	5,15,8
730	and	0,15,9
731	xor	3,3,4
732	rotrdi	4,4,5
733	xor	5,5,0
734	and	0,8,9
735	xor	3,3,4
736	add	10,10,14
737	xor	5,5,0
738	add	14,14,3
739	add	14,14,5
740
741	rotrdi	3,19,1
742	rotrdi	4,19,8
743	rotrdi	5,16,19
744	rotrdi	0,16,61
745	xor	3,3,4
746	srdi	4,19,7
747	xor	5,5,0
748	srdi	0,16,6
749	add	18,18,27
750	xor	3,3,4
751	xor	5,5,0
752	ld	0,16(7)
753	add	18,18,3
754	add	18,18,5
755	rotrdi	3,10,14
756	rotrdi	4,10,18
757	and	5,11,10
758	xor	3,3,4
759	add	6,6,0
760	andc	0,12,10
761	rotrdi	4,4,23
762	or	5,5,0
763	add	6,6,18
764	xor	3,3,4
765	add	6,6,5
766	add	6,6,3
767
768	rotrdi	3,14,28
769	rotrdi	4,14,34
770	and	5,14,15
771	and	0,14,8
772	xor	3,3,4
773	rotrdi	4,4,5
774	xor	5,5,0
775	and	0,15,8
776	xor	3,3,4
777	add	9,9,6
778	xor	5,5,0
779	add	6,6,3
780	add	6,6,5
781
782	rotrdi	3,20,1
783	rotrdi	4,20,8
784	rotrdi	5,17,19
785	rotrdi	0,17,61
786	xor	3,3,4
787	srdi	4,20,7
788	xor	5,5,0
789	srdi	0,17,6
790	add	19,19,28
791	xor	3,3,4
792	xor	5,5,0
793	ld	0,24(7)
794	add	19,19,3
795	add	19,19,5
796	rotrdi	3,9,14
797	rotrdi	4,9,18
798	and	5,10,9
799	xor	3,3,4
800	add	12,12,0
801	andc	0,11,9
802	rotrdi	4,4,23
803	or	5,5,0
804	add	12,12,19
805	xor	3,3,4
806	add	12,12,5
807	add	12,12,3
808
809	rotrdi	3,6,28
810	rotrdi	4,6,34
811	and	5,6,14
812	and	0,6,15
813	xor	3,3,4
814	rotrdi	4,4,5
815	xor	5,5,0
816	and	0,14,15
817	xor	3,3,4
818	add	8,8,12
819	xor	5,5,0
820	add	12,12,3
821	add	12,12,5
822
823	rotrdi	3,21,1
824	rotrdi	4,21,8
825	rotrdi	5,18,19
826	rotrdi	0,18,61
827	xor	3,3,4
828	srdi	4,21,7
829	xor	5,5,0
830	srdi	0,18,6
831	add	20,20,29
832	xor	3,3,4
833	xor	5,5,0
834	ld	0,32(7)
835	add	20,20,3
836	add	20,20,5
837	rotrdi	3,8,14
838	rotrdi	4,8,18
839	and	5,9,8
840	xor	3,3,4
841	add	11,11,0
842	andc	0,10,8
843	rotrdi	4,4,23
844	or	5,5,0
845	add	11,11,20
846	xor	3,3,4
847	add	11,11,5
848	add	11,11,3
849
850	rotrdi	3,12,28
851	rotrdi	4,12,34
852	and	5,12,6
853	and	0,12,14
854	xor	3,3,4
855	rotrdi	4,4,5
856	xor	5,5,0
857	and	0,6,14
858	xor	3,3,4
859	add	15,15,11
860	xor	5,5,0
861	add	11,11,3
862	add	11,11,5
863
864	rotrdi	3,22,1
865	rotrdi	4,22,8
866	rotrdi	5,19,19
867	rotrdi	0,19,61
868	xor	3,3,4
869	srdi	4,22,7
870	xor	5,5,0
871	srdi	0,19,6
872	add	21,21,30
873	xor	3,3,4
874	xor	5,5,0
875	ld	0,40(7)
876	add	21,21,3
877	add	21,21,5
878	rotrdi	3,15,14
879	rotrdi	4,15,18
880	and	5,8,15
881	xor	3,3,4
882	add	10,10,0
883	andc	0,9,15
884	rotrdi	4,4,23
885	or	5,5,0
886	add	10,10,21
887	xor	3,3,4
888	add	10,10,5
889	add	10,10,3
890
891	rotrdi	3,11,28
892	rotrdi	4,11,34
893	and	5,11,12
894	and	0,11,6
895	xor	3,3,4
896	rotrdi	4,4,5
897	xor	5,5,0
898	and	0,12,6
899	xor	3,3,4
900	add	14,14,10
901	xor	5,5,0
902	add	10,10,3
903	add	10,10,5
904
905	rotrdi	3,23,1
906	rotrdi	4,23,8
907	rotrdi	5,20,19
908	rotrdi	0,20,61
909	xor	3,3,4
910	srdi	4,23,7
911	xor	5,5,0
912	srdi	0,20,6
913	add	22,22,31
914	xor	3,3,4
915	xor	5,5,0
916	ld	0,48(7)
917	add	22,22,3
918	add	22,22,5
919	rotrdi	3,14,14
920	rotrdi	4,14,18
921	and	5,15,14
922	xor	3,3,4
923	add	9,9,0
924	andc	0,8,14
925	rotrdi	4,4,23
926	or	5,5,0
927	add	9,9,22
928	xor	3,3,4
929	add	9,9,5
930	add	9,9,3
931
932	rotrdi	3,10,28
933	rotrdi	4,10,34
934	and	5,10,11
935	and	0,10,12
936	xor	3,3,4
937	rotrdi	4,4,5
938	xor	5,5,0
939	and	0,11,12
940	xor	3,3,4
941	add	6,6,9
942	xor	5,5,0
943	add	9,9,3
944	add	9,9,5
945
946	rotrdi	3,24,1
947	rotrdi	4,24,8
948	rotrdi	5,21,19
949	rotrdi	0,21,61
950	xor	3,3,4
951	srdi	4,24,7
952	xor	5,5,0
953	srdi	0,21,6
954	add	23,23,16
955	xor	3,3,4
956	xor	5,5,0
957	ld	0,56(7)
958	add	23,23,3
959	add	23,23,5
960	rotrdi	3,6,14
961	rotrdi	4,6,18
962	and	5,14,6
963	xor	3,3,4
964	add	8,8,0
965	andc	0,15,6
966	rotrdi	4,4,23
967	or	5,5,0
968	add	8,8,23
969	xor	3,3,4
970	add	8,8,5
971	add	8,8,3
972
973	rotrdi	3,9,28
974	rotrdi	4,9,34
975	and	5,9,10
976	and	0,9,11
977	xor	3,3,4
978	rotrdi	4,4,5
979	xor	5,5,0
980	and	0,10,11
981	xor	3,3,4
982	add	12,12,8
983	xor	5,5,0
984	add	8,8,3
985	add	8,8,5
986
987	rotrdi	3,25,1
988	rotrdi	4,25,8
989	rotrdi	5,22,19
990	rotrdi	0,22,61
991	xor	3,3,4
992	srdi	4,25,7
993	xor	5,5,0
994	srdi	0,22,6
995	add	24,24,17
996	xor	3,3,4
997	xor	5,5,0
998	ld	0,64(7)
999	add	24,24,3
1000	add	24,24,5
1001	rotrdi	3,12,14
1002	rotrdi	4,12,18
1003	and	5,6,12
1004	xor	3,3,4
1005	add	15,15,0
1006	andc	0,14,12
1007	rotrdi	4,4,23
1008	or	5,5,0
1009	add	15,15,24
1010	xor	3,3,4
1011	add	15,15,5
1012	add	15,15,3
1013
1014	rotrdi	3,8,28
1015	rotrdi	4,8,34
1016	and	5,8,9
1017	and	0,8,10
1018	xor	3,3,4
1019	rotrdi	4,4,5
1020	xor	5,5,0
1021	and	0,9,10
1022	xor	3,3,4
1023	add	11,11,15
1024	xor	5,5,0
1025	add	15,15,3
1026	add	15,15,5
1027
1028	rotrdi	3,26,1
1029	rotrdi	4,26,8
1030	rotrdi	5,23,19
1031	rotrdi	0,23,61
1032	xor	3,3,4
1033	srdi	4,26,7
1034	xor	5,5,0
1035	srdi	0,23,6
1036	add	25,25,18
1037	xor	3,3,4
1038	xor	5,5,0
1039	ld	0,72(7)
1040	add	25,25,3
1041	add	25,25,5
1042	rotrdi	3,11,14
1043	rotrdi	4,11,18
1044	and	5,12,11
1045	xor	3,3,4
1046	add	14,14,0
1047	andc	0,6,11
1048	rotrdi	4,4,23
1049	or	5,5,0
1050	add	14,14,25
1051	xor	3,3,4
1052	add	14,14,5
1053	add	14,14,3
1054
1055	rotrdi	3,15,28
1056	rotrdi	4,15,34
1057	and	5,15,8
1058	and	0,15,9
1059	xor	3,3,4
1060	rotrdi	4,4,5
1061	xor	5,5,0
1062	and	0,8,9
1063	xor	3,3,4
1064	add	10,10,14
1065	xor	5,5,0
1066	add	14,14,3
1067	add	14,14,5
1068
1069	rotrdi	3,27,1
1070	rotrdi	4,27,8
1071	rotrdi	5,24,19
1072	rotrdi	0,24,61
1073	xor	3,3,4
1074	srdi	4,27,7
1075	xor	5,5,0
1076	srdi	0,24,6
1077	add	26,26,19
1078	xor	3,3,4
1079	xor	5,5,0
1080	ld	0,80(7)
1081	add	26,26,3
1082	add	26,26,5
1083	rotrdi	3,10,14
1084	rotrdi	4,10,18
1085	and	5,11,10
1086	xor	3,3,4
1087	add	6,6,0
1088	andc	0,12,10
1089	rotrdi	4,4,23
1090	or	5,5,0
1091	add	6,6,26
1092	xor	3,3,4
1093	add	6,6,5
1094	add	6,6,3
1095
1096	rotrdi	3,14,28
1097	rotrdi	4,14,34
1098	and	5,14,15
1099	and	0,14,8
1100	xor	3,3,4
1101	rotrdi	4,4,5
1102	xor	5,5,0
1103	and	0,15,8
1104	xor	3,3,4
1105	add	9,9,6
1106	xor	5,5,0
1107	add	6,6,3
1108	add	6,6,5
1109
1110	rotrdi	3,28,1
1111	rotrdi	4,28,8
1112	rotrdi	5,25,19
1113	rotrdi	0,25,61
1114	xor	3,3,4
1115	srdi	4,28,7
1116	xor	5,5,0
1117	srdi	0,25,6
1118	add	27,27,20
1119	xor	3,3,4
1120	xor	5,5,0
1121	ld	0,88(7)
1122	add	27,27,3
1123	add	27,27,5
1124	rotrdi	3,9,14
1125	rotrdi	4,9,18
1126	and	5,10,9
1127	xor	3,3,4
1128	add	12,12,0
1129	andc	0,11,9
1130	rotrdi	4,4,23
1131	or	5,5,0
1132	add	12,12,27
1133	xor	3,3,4
1134	add	12,12,5
1135	add	12,12,3
1136
1137	rotrdi	3,6,28
1138	rotrdi	4,6,34
1139	and	5,6,14
1140	and	0,6,15
1141	xor	3,3,4
1142	rotrdi	4,4,5
1143	xor	5,5,0
1144	and	0,14,15
1145	xor	3,3,4
1146	add	8,8,12
1147	xor	5,5,0
1148	add	12,12,3
1149	add	12,12,5
1150
1151	rotrdi	3,29,1
1152	rotrdi	4,29,8
1153	rotrdi	5,26,19
1154	rotrdi	0,26,61
1155	xor	3,3,4
1156	srdi	4,29,7
1157	xor	5,5,0
1158	srdi	0,26,6
1159	add	28,28,21
1160	xor	3,3,4
1161	xor	5,5,0
1162	ld	0,96(7)
1163	add	28,28,3
1164	add	28,28,5
1165	rotrdi	3,8,14
1166	rotrdi	4,8,18
1167	and	5,9,8
1168	xor	3,3,4
1169	add	11,11,0
1170	andc	0,10,8
1171	rotrdi	4,4,23
1172	or	5,5,0
1173	add	11,11,28
1174	xor	3,3,4
1175	add	11,11,5
1176	add	11,11,3
1177
1178	rotrdi	3,12,28
1179	rotrdi	4,12,34
1180	and	5,12,6
1181	and	0,12,14
1182	xor	3,3,4
1183	rotrdi	4,4,5
1184	xor	5,5,0
1185	and	0,6,14
1186	xor	3,3,4
1187	add	15,15,11
1188	xor	5,5,0
1189	add	11,11,3
1190	add	11,11,5
1191
1192	rotrdi	3,30,1
1193	rotrdi	4,30,8
1194	rotrdi	5,27,19
1195	rotrdi	0,27,61
1196	xor	3,3,4
1197	srdi	4,30,7
1198	xor	5,5,0
1199	srdi	0,27,6
1200	add	29,29,22
1201	xor	3,3,4
1202	xor	5,5,0
1203	ld	0,104(7)
1204	add	29,29,3
1205	add	29,29,5
1206	rotrdi	3,15,14
1207	rotrdi	4,15,18
1208	and	5,8,15
1209	xor	3,3,4
1210	add	10,10,0
1211	andc	0,9,15
1212	rotrdi	4,4,23
1213	or	5,5,0
1214	add	10,10,29
1215	xor	3,3,4
1216	add	10,10,5
1217	add	10,10,3
1218
1219	rotrdi	3,11,28
1220	rotrdi	4,11,34
1221	and	5,11,12
1222	and	0,11,6
1223	xor	3,3,4
1224	rotrdi	4,4,5
1225	xor	5,5,0
1226	and	0,12,6
1227	xor	3,3,4
1228	add	14,14,10
1229	xor	5,5,0
1230	add	10,10,3
1231	add	10,10,5
1232
1233	rotrdi	3,31,1
1234	rotrdi	4,31,8
1235	rotrdi	5,28,19
1236	rotrdi	0,28,61
1237	xor	3,3,4
1238	srdi	4,31,7
1239	xor	5,5,0
1240	srdi	0,28,6
1241	add	30,30,23
1242	xor	3,3,4
1243	xor	5,5,0
1244	ld	0,112(7)
1245	add	30,30,3
1246	add	30,30,5
1247	rotrdi	3,14,14
1248	rotrdi	4,14,18
1249	and	5,15,14
1250	xor	3,3,4
1251	add	9,9,0
1252	andc	0,8,14
1253	rotrdi	4,4,23
1254	or	5,5,0
1255	add	9,9,30
1256	xor	3,3,4
1257	add	9,9,5
1258	add	9,9,3
1259
1260	rotrdi	3,10,28
1261	rotrdi	4,10,34
1262	and	5,10,11
1263	and	0,10,12
1264	xor	3,3,4
1265	rotrdi	4,4,5
1266	xor	5,5,0
1267	and	0,11,12
1268	xor	3,3,4
1269	add	6,6,9
1270	xor	5,5,0
1271	add	9,9,3
1272	add	9,9,5
1273
1274	rotrdi	3,16,1
1275	rotrdi	4,16,8
1276	rotrdi	5,29,19
1277	rotrdi	0,29,61
1278	xor	3,3,4
1279	srdi	4,16,7
1280	xor	5,5,0
1281	srdi	0,29,6
1282	add	31,31,24
1283	xor	3,3,4
1284	xor	5,5,0
1285	ld	0,120(7)
1286	add	31,31,3
1287	add	31,31,5
1288	rotrdi	3,6,14
1289	rotrdi	4,6,18
1290	and	5,14,6
1291	xor	3,3,4
1292	add	8,8,0
1293	andc	0,15,6
1294	rotrdi	4,4,23
1295	or	5,5,0
1296	add	8,8,31
1297	xor	3,3,4
1298	add	8,8,5
1299	add	8,8,3
1300
1301	rotrdi	3,9,28
1302	rotrdi	4,9,34
1303	and	5,9,10
1304	and	0,9,11
1305	xor	3,3,4
1306	rotrdi	4,4,5
1307	xor	5,5,0
1308	and	0,10,11
1309	xor	3,3,4
1310	add	12,12,8
1311	xor	5,5,0
1312	add	8,8,3
1313	add	8,8,5
1314
1315	bdnz	.Lrounds
1316
1317	ld	3,208(1)
1318	ld	31,200(1)
1319	ld	5,192(1)
1320	subi	7,7,512
1321
1322	ld	16,0(3)
1323	ld	17,8(3)
1324	ld	18,16(3)
1325	ld	19,24(3)
1326	ld	20,32(3)
1327	ld	21,40(3)
1328	ld	22,48(3)
1329	addi	31,31,128
1330	ld	23,56(3)
1331	add	8,8,16
1332	add	9,9,17
1333	std	31,200(1)
1334	add	10,10,18
1335	std	8,0(3)
1336	add	11,11,19
1337	std	9,8(3)
1338	add	12,12,20
1339	std	10,16(3)
1340	add	6,6,21
1341	std	11,24(3)
1342	add	14,14,22
1343	std	12,32(3)
1344	add	15,15,23
1345	std	6,40(3)
1346	std	14,48(3)
1347	cmpld	31,5
1348	std	15,56(3)
1349	bne	.Lsha2_block_private
1350	blr
1351.long	0
1352.byte	0,12,0x14,0,0,0,0,0
1353.size	.zfs_sha512_ppc,.-.zfs_sha512_ppc
1354.size	zfs_sha512_ppc,.-.zfs_sha512_ppc
1355.align	6
1356.LPICmeup:
1357	mflr	0
1358	bcl	20,31,$+4
1359	mflr	7
1360	addi	7,7,56
1361	mtlr	0
1362	blr
1363.long	0
1364.byte	0,12,0x14,0,0,0,0,0
1365.space	28
1366.long	0x428a2f98,0xd728ae22
1367.long	0x71374491,0x23ef65cd
1368.long	0xb5c0fbcf,0xec4d3b2f
1369.long	0xe9b5dba5,0x8189dbbc
1370.long	0x3956c25b,0xf348b538
1371.long	0x59f111f1,0xb605d019
1372.long	0x923f82a4,0xaf194f9b
1373.long	0xab1c5ed5,0xda6d8118
1374.long	0xd807aa98,0xa3030242
1375.long	0x12835b01,0x45706fbe
1376.long	0x243185be,0x4ee4b28c
1377.long	0x550c7dc3,0xd5ffb4e2
1378.long	0x72be5d74,0xf27b896f
1379.long	0x80deb1fe,0x3b1696b1
1380.long	0x9bdc06a7,0x25c71235
1381.long	0xc19bf174,0xcf692694
1382.long	0xe49b69c1,0x9ef14ad2
1383.long	0xefbe4786,0x384f25e3
1384.long	0x0fc19dc6,0x8b8cd5b5
1385.long	0x240ca1cc,0x77ac9c65
1386.long	0x2de92c6f,0x592b0275
1387.long	0x4a7484aa,0x6ea6e483
1388.long	0x5cb0a9dc,0xbd41fbd4
1389.long	0x76f988da,0x831153b5
1390.long	0x983e5152,0xee66dfab
1391.long	0xa831c66d,0x2db43210
1392.long	0xb00327c8,0x98fb213f
1393.long	0xbf597fc7,0xbeef0ee4
1394.long	0xc6e00bf3,0x3da88fc2
1395.long	0xd5a79147,0x930aa725
1396.long	0x06ca6351,0xe003826f
1397.long	0x14292967,0x0a0e6e70
1398.long	0x27b70a85,0x46d22ffc
1399.long	0x2e1b2138,0x5c26c926
1400.long	0x4d2c6dfc,0x5ac42aed
1401.long	0x53380d13,0x9d95b3df
1402.long	0x650a7354,0x8baf63de
1403.long	0x766a0abb,0x3c77b2a8
1404.long	0x81c2c92e,0x47edaee6
1405.long	0x92722c85,0x1482353b
1406.long	0xa2bfe8a1,0x4cf10364
1407.long	0xa81a664b,0xbc423001
1408.long	0xc24b8b70,0xd0f89791
1409.long	0xc76c51a3,0x0654be30
1410.long	0xd192e819,0xd6ef5218
1411.long	0xd6990624,0x5565a910
1412.long	0xf40e3585,0x5771202a
1413.long	0x106aa070,0x32bbd1b8
1414.long	0x19a4c116,0xb8d2d0c8
1415.long	0x1e376c08,0x5141ab53
1416.long	0x2748774c,0xdf8eeb99
1417.long	0x34b0bcb5,0xe19b48a8
1418.long	0x391c0cb3,0xc5c95a63
1419.long	0x4ed8aa4a,0xe3418acb
1420.long	0x5b9cca4f,0x7763e373
1421.long	0x682e6ff3,0xd6b2b8a3
1422.long	0x748f82ee,0x5defb2fc
1423.long	0x78a5636f,0x43172f60
1424.long	0x84c87814,0xa1f0ab72
1425.long	0x8cc70208,0x1a6439ec
1426.long	0x90befffa,0x23631e28
1427.long	0xa4506ceb,0xde82bde9
1428.long	0xbef9a3f7,0xb2c67915
1429.long	0xc67178f2,0xe372532b
1430.long	0xca273ece,0xea26619c
1431.long	0xd186b8c7,0x21c0c207
1432.long	0xeada7dd6,0xcde0eb1e
1433.long	0xf57d4f7f,0xee6ed178
1434.long	0x06f067aa,0x72176fba
1435.long	0x0a637dc5,0xa2c898a6
1436.long	0x113f9804,0xbef90dae
1437.long	0x1b710b35,0x131c471b
1438.long	0x28db77f5,0x23047d84
1439.long	0x32caab7b,0x40c72493
1440.long	0x3c9ebe0a,0x15c9bebc
1441.long	0x431d67c4,0x9c100d4c
1442.long	0x4cc5d4be,0xcb3e42b6
1443.long	0x597f299c,0xfc657e2a
1444.long	0x5fcb6fab,0x3ad6faec
1445.long	0x6c44198c,0x4a475817
1446
1447#elif (defined(__PPC64__) && defined(__LITTLE_ENDIAN__))
1448
1449.abiversion	2
1450.text
1451
1452.globl	zfs_sha512_ppc
1453.type	zfs_sha512_ppc,@function
1454.align	6
1455zfs_sha512_ppc:
1456.localentry	zfs_sha512_ppc,0
1457
1458	stdu	1,-384(1)
1459	mflr	0
1460	sldi	5,5,7
1461
1462	std	3,208(1)
1463
1464	std	14,240(1)
1465	std	15,248(1)
1466	std	16,256(1)
1467	std	17,264(1)
1468	std	18,272(1)
1469	std	19,280(1)
1470	std	20,288(1)
1471	std	21,296(1)
1472	std	22,304(1)
1473	std	23,312(1)
1474	std	24,320(1)
1475	std	25,328(1)
1476	std	26,336(1)
1477	std	27,344(1)
1478	std	28,352(1)
1479	std	29,360(1)
1480	std	30,368(1)
1481	std	31,376(1)
1482	std	0,400(1)
1483	ld	8,0(3)
1484	mr	31,4
1485	ld	9,8(3)
1486	ld	10,16(3)
1487	ld	11,24(3)
1488	ld	12,32(3)
1489	ld	6,40(3)
1490	ld	14,48(3)
1491	ld	15,56(3)
1492	bl	.LPICmeup
1493.LPICedup:
1494	andi.	0,31,3
1495	bne	.Lunaligned
1496.Laligned:
1497	add	5,31,5
1498	std	5,192(1)
1499	std	31,200(1)
1500	bl	.Lsha2_block_private
1501	b	.Ldone
1502
1503.align	4
1504.Lunaligned:
1505	subfic	0,31,4096
1506	andi.	0,0,3968
1507	beq	.Lcross_page
1508	cmpld	5,0
1509	ble	.Laligned
1510	subfc	5,0,5
1511	add	0,31,0
1512	std	5,184(1)
1513	std	0,192(1)
1514	std	31,200(1)
1515	bl	.Lsha2_block_private
1516
1517	ld	5,184(1)
1518.Lcross_page:
1519	li	0,32
1520	mtctr	0
1521	addi	20,1,48
1522.Lmemcpy:
1523	lbz	16,0(31)
1524	lbz	17,1(31)
1525	lbz	18,2(31)
1526	lbz	19,3(31)
1527	addi	31,31,4
1528	stb	16,0(20)
1529	stb	17,1(20)
1530	stb	18,2(20)
1531	stb	19,3(20)
1532	addi	20,20,4
1533	bdnz	.Lmemcpy
1534	std	31,176(1)
1535	addi	0,1,176
1536	addi	31,1,48
1537	std	5,184(1)
1538	std	0,192(1)
1539	std	31,200(1)
1540	bl	.Lsha2_block_private
1541	ld	31,176(1)
1542	ld	5,184(1)
1543	addic.	5,5,-128
1544	bne	.Lunaligned
1545
1546.Ldone:
1547	ld	0,400(1)
1548	ld	14,240(1)
1549	ld	15,248(1)
1550	ld	16,256(1)
1551	ld	17,264(1)
1552	ld	18,272(1)
1553	ld	19,280(1)
1554	ld	20,288(1)
1555	ld	21,296(1)
1556	ld	22,304(1)
1557	ld	23,312(1)
1558	ld	24,320(1)
1559	ld	25,328(1)
1560	ld	26,336(1)
1561	ld	27,344(1)
1562	ld	28,352(1)
1563	ld	29,360(1)
1564	ld	30,368(1)
1565	ld	31,376(1)
1566	mtlr	0
1567	addi	1,1,384
1568	blr
1569.long	0
1570.byte	0,12,4,1,0x80,18,3,0
1571.long	0
1572.align	4
1573.Lsha2_block_private:
1574	ld	0,0(7)
1575	lwz	3,0(31)
1576	lwz	4,4(31)
1577	rotlwi	5,3,8
1578	rotlwi	16,4,8
1579	rlwimi	5,3,24,0,7
1580	rlwimi	16,4,24,0,7
1581	rlwimi	5,3,24,16,23
1582	rlwimi	16,4,24,16,23
1583	insrdi	16,5,32,0
1584	rotrdi	3,12,14
1585	rotrdi	4,12,18
1586	and	5,6,12
1587	xor	3,3,4
1588	add	15,15,0
1589	andc	0,14,12
1590	rotrdi	4,4,23
1591	or	5,5,0
1592	add	15,15,16
1593	xor	3,3,4
1594	add	15,15,5
1595	add	15,15,3
1596
1597	rotrdi	3,8,28
1598	rotrdi	4,8,34
1599	and	5,8,9
1600	and	0,8,10
1601	xor	3,3,4
1602	rotrdi	4,4,5
1603	xor	5,5,0
1604	and	0,9,10
1605	xor	3,3,4
1606	add	11,11,15
1607	xor	5,5,0
1608	ld	0,8(7)
1609	add	15,15,3
1610	add	15,15,5
1611
1612	lwz	3,8(31)
1613	lwz	4,12(31)
1614	rotlwi	5,3,8
1615	rotlwi	17,4,8
1616	rlwimi	5,3,24,0,7
1617	rlwimi	17,4,24,0,7
1618	rlwimi	5,3,24,16,23
1619	rlwimi	17,4,24,16,23
1620	insrdi	17,5,32,0
1621	rotrdi	3,11,14
1622	rotrdi	4,11,18
1623	and	5,12,11
1624	xor	3,3,4
1625	add	14,14,0
1626	andc	0,6,11
1627	rotrdi	4,4,23
1628	or	5,5,0
1629	add	14,14,17
1630	xor	3,3,4
1631	add	14,14,5
1632	add	14,14,3
1633
1634	rotrdi	3,15,28
1635	rotrdi	4,15,34
1636	and	5,15,8
1637	and	0,15,9
1638	xor	3,3,4
1639	rotrdi	4,4,5
1640	xor	5,5,0
1641	and	0,8,9
1642	xor	3,3,4
1643	add	10,10,14
1644	xor	5,5,0
1645	ld	0,16(7)
1646	add	14,14,3
1647	add	14,14,5
1648
1649	lwz	3,16(31)
1650	lwz	4,20(31)
1651	rotlwi	5,3,8
1652	rotlwi	18,4,8
1653	rlwimi	5,3,24,0,7
1654	rlwimi	18,4,24,0,7
1655	rlwimi	5,3,24,16,23
1656	rlwimi	18,4,24,16,23
1657	insrdi	18,5,32,0
1658	rotrdi	3,10,14
1659	rotrdi	4,10,18
1660	and	5,11,10
1661	xor	3,3,4
1662	add	6,6,0
1663	andc	0,12,10
1664	rotrdi	4,4,23
1665	or	5,5,0
1666	add	6,6,18
1667	xor	3,3,4
1668	add	6,6,5
1669	add	6,6,3
1670
1671	rotrdi	3,14,28
1672	rotrdi	4,14,34
1673	and	5,14,15
1674	and	0,14,8
1675	xor	3,3,4
1676	rotrdi	4,4,5
1677	xor	5,5,0
1678	and	0,15,8
1679	xor	3,3,4
1680	add	9,9,6
1681	xor	5,5,0
1682	ld	0,24(7)
1683	add	6,6,3
1684	add	6,6,5
1685
1686	lwz	3,24(31)
1687	lwz	4,28(31)
1688	rotlwi	5,3,8
1689	rotlwi	19,4,8
1690	rlwimi	5,3,24,0,7
1691	rlwimi	19,4,24,0,7
1692	rlwimi	5,3,24,16,23
1693	rlwimi	19,4,24,16,23
1694	insrdi	19,5,32,0
1695	rotrdi	3,9,14
1696	rotrdi	4,9,18
1697	and	5,10,9
1698	xor	3,3,4
1699	add	12,12,0
1700	andc	0,11,9
1701	rotrdi	4,4,23
1702	or	5,5,0
1703	add	12,12,19
1704	xor	3,3,4
1705	add	12,12,5
1706	add	12,12,3
1707
1708	rotrdi	3,6,28
1709	rotrdi	4,6,34
1710	and	5,6,14
1711	and	0,6,15
1712	xor	3,3,4
1713	rotrdi	4,4,5
1714	xor	5,5,0
1715	and	0,14,15
1716	xor	3,3,4
1717	add	8,8,12
1718	xor	5,5,0
1719	ld	0,32(7)
1720	add	12,12,3
1721	add	12,12,5
1722
1723	lwz	3,32(31)
1724	lwz	4,36(31)
1725	rotlwi	5,3,8
1726	rotlwi	20,4,8
1727	rlwimi	5,3,24,0,7
1728	rlwimi	20,4,24,0,7
1729	rlwimi	5,3,24,16,23
1730	rlwimi	20,4,24,16,23
1731	insrdi	20,5,32,0
1732	rotrdi	3,8,14
1733	rotrdi	4,8,18
1734	and	5,9,8
1735	xor	3,3,4
1736	add	11,11,0
1737	andc	0,10,8
1738	rotrdi	4,4,23
1739	or	5,5,0
1740	add	11,11,20
1741	xor	3,3,4
1742	add	11,11,5
1743	add	11,11,3
1744
1745	rotrdi	3,12,28
1746	rotrdi	4,12,34
1747	and	5,12,6
1748	and	0,12,14
1749	xor	3,3,4
1750	rotrdi	4,4,5
1751	xor	5,5,0
1752	and	0,6,14
1753	xor	3,3,4
1754	add	15,15,11
1755	xor	5,5,0
1756	ld	0,40(7)
1757	add	11,11,3
1758	add	11,11,5
1759
1760	lwz	3,40(31)
1761	lwz	4,44(31)
1762	rotlwi	5,3,8
1763	rotlwi	21,4,8
1764	rlwimi	5,3,24,0,7
1765	rlwimi	21,4,24,0,7
1766	rlwimi	5,3,24,16,23
1767	rlwimi	21,4,24,16,23
1768	insrdi	21,5,32,0
1769	rotrdi	3,15,14
1770	rotrdi	4,15,18
1771	and	5,8,15
1772	xor	3,3,4
1773	add	10,10,0
1774	andc	0,9,15
1775	rotrdi	4,4,23
1776	or	5,5,0
1777	add	10,10,21
1778	xor	3,3,4
1779	add	10,10,5
1780	add	10,10,3
1781
1782	rotrdi	3,11,28
1783	rotrdi	4,11,34
1784	and	5,11,12
1785	and	0,11,6
1786	xor	3,3,4
1787	rotrdi	4,4,5
1788	xor	5,5,0
1789	and	0,12,6
1790	xor	3,3,4
1791	add	14,14,10
1792	xor	5,5,0
1793	ld	0,48(7)
1794	add	10,10,3
1795	add	10,10,5
1796
1797	lwz	3,48(31)
1798	lwz	4,52(31)
1799	rotlwi	5,3,8
1800	rotlwi	22,4,8
1801	rlwimi	5,3,24,0,7
1802	rlwimi	22,4,24,0,7
1803	rlwimi	5,3,24,16,23
1804	rlwimi	22,4,24,16,23
1805	insrdi	22,5,32,0
1806	rotrdi	3,14,14
1807	rotrdi	4,14,18
1808	and	5,15,14
1809	xor	3,3,4
1810	add	9,9,0
1811	andc	0,8,14
1812	rotrdi	4,4,23
1813	or	5,5,0
1814	add	9,9,22
1815	xor	3,3,4
1816	add	9,9,5
1817	add	9,9,3
1818
1819	rotrdi	3,10,28
1820	rotrdi	4,10,34
1821	and	5,10,11
1822	and	0,10,12
1823	xor	3,3,4
1824	rotrdi	4,4,5
1825	xor	5,5,0
1826	and	0,11,12
1827	xor	3,3,4
1828	add	6,6,9
1829	xor	5,5,0
1830	ld	0,56(7)
1831	add	9,9,3
1832	add	9,9,5
1833
1834	lwz	3,56(31)
1835	lwz	4,60(31)
1836	rotlwi	5,3,8
1837	rotlwi	23,4,8
1838	rlwimi	5,3,24,0,7
1839	rlwimi	23,4,24,0,7
1840	rlwimi	5,3,24,16,23
1841	rlwimi	23,4,24,16,23
1842	insrdi	23,5,32,0
1843	rotrdi	3,6,14
1844	rotrdi	4,6,18
1845	and	5,14,6
1846	xor	3,3,4
1847	add	8,8,0
1848	andc	0,15,6
1849	rotrdi	4,4,23
1850	or	5,5,0
1851	add	8,8,23
1852	xor	3,3,4
1853	add	8,8,5
1854	add	8,8,3
1855
1856	rotrdi	3,9,28
1857	rotrdi	4,9,34
1858	and	5,9,10
1859	and	0,9,11
1860	xor	3,3,4
1861	rotrdi	4,4,5
1862	xor	5,5,0
1863	and	0,10,11
1864	xor	3,3,4
1865	add	12,12,8
1866	xor	5,5,0
1867	ld	0,64(7)
1868	add	8,8,3
1869	add	8,8,5
1870
1871	lwz	3,64(31)
1872	lwz	4,68(31)
1873	rotlwi	5,3,8
1874	rotlwi	24,4,8
1875	rlwimi	5,3,24,0,7
1876	rlwimi	24,4,24,0,7
1877	rlwimi	5,3,24,16,23
1878	rlwimi	24,4,24,16,23
1879	insrdi	24,5,32,0
1880	rotrdi	3,12,14
1881	rotrdi	4,12,18
1882	and	5,6,12
1883	xor	3,3,4
1884	add	15,15,0
1885	andc	0,14,12
1886	rotrdi	4,4,23
1887	or	5,5,0
1888	add	15,15,24
1889	xor	3,3,4
1890	add	15,15,5
1891	add	15,15,3
1892
1893	rotrdi	3,8,28
1894	rotrdi	4,8,34
1895	and	5,8,9
1896	and	0,8,10
1897	xor	3,3,4
1898	rotrdi	4,4,5
1899	xor	5,5,0
1900	and	0,9,10
1901	xor	3,3,4
1902	add	11,11,15
1903	xor	5,5,0
1904	ld	0,72(7)
1905	add	15,15,3
1906	add	15,15,5
1907
1908	lwz	3,72(31)
1909	lwz	4,76(31)
1910	rotlwi	5,3,8
1911	rotlwi	25,4,8
1912	rlwimi	5,3,24,0,7
1913	rlwimi	25,4,24,0,7
1914	rlwimi	5,3,24,16,23
1915	rlwimi	25,4,24,16,23
1916	insrdi	25,5,32,0
1917	rotrdi	3,11,14
1918	rotrdi	4,11,18
1919	and	5,12,11
1920	xor	3,3,4
1921	add	14,14,0
1922	andc	0,6,11
1923	rotrdi	4,4,23
1924	or	5,5,0
1925	add	14,14,25
1926	xor	3,3,4
1927	add	14,14,5
1928	add	14,14,3
1929
1930	rotrdi	3,15,28
1931	rotrdi	4,15,34
1932	and	5,15,8
1933	and	0,15,9
1934	xor	3,3,4
1935	rotrdi	4,4,5
1936	xor	5,5,0
1937	and	0,8,9
1938	xor	3,3,4
1939	add	10,10,14
1940	xor	5,5,0
1941	ld	0,80(7)
1942	add	14,14,3
1943	add	14,14,5
1944
1945	lwz	3,80(31)
1946	lwz	4,84(31)
1947	rotlwi	5,3,8
1948	rotlwi	26,4,8
1949	rlwimi	5,3,24,0,7
1950	rlwimi	26,4,24,0,7
1951	rlwimi	5,3,24,16,23
1952	rlwimi	26,4,24,16,23
1953	insrdi	26,5,32,0
1954	rotrdi	3,10,14
1955	rotrdi	4,10,18
1956	and	5,11,10
1957	xor	3,3,4
1958	add	6,6,0
1959	andc	0,12,10
1960	rotrdi	4,4,23
1961	or	5,5,0
1962	add	6,6,26
1963	xor	3,3,4
1964	add	6,6,5
1965	add	6,6,3
1966
1967	rotrdi	3,14,28
1968	rotrdi	4,14,34
1969	and	5,14,15
1970	and	0,14,8
1971	xor	3,3,4
1972	rotrdi	4,4,5
1973	xor	5,5,0
1974	and	0,15,8
1975	xor	3,3,4
1976	add	9,9,6
1977	xor	5,5,0
1978	ld	0,88(7)
1979	add	6,6,3
1980	add	6,6,5
1981
1982	lwz	3,88(31)
1983	lwz	4,92(31)
1984	rotlwi	5,3,8
1985	rotlwi	27,4,8
1986	rlwimi	5,3,24,0,7
1987	rlwimi	27,4,24,0,7
1988	rlwimi	5,3,24,16,23
1989	rlwimi	27,4,24,16,23
1990	insrdi	27,5,32,0
1991	rotrdi	3,9,14
1992	rotrdi	4,9,18
1993	and	5,10,9
1994	xor	3,3,4
1995	add	12,12,0
1996	andc	0,11,9
1997	rotrdi	4,4,23
1998	or	5,5,0
1999	add	12,12,27
2000	xor	3,3,4
2001	add	12,12,5
2002	add	12,12,3
2003
2004	rotrdi	3,6,28
2005	rotrdi	4,6,34
2006	and	5,6,14
2007	and	0,6,15
2008	xor	3,3,4
2009	rotrdi	4,4,5
2010	xor	5,5,0
2011	and	0,14,15
2012	xor	3,3,4
2013	add	8,8,12
2014	xor	5,5,0
2015	ld	0,96(7)
2016	add	12,12,3
2017	add	12,12,5
2018
2019	lwz	3,96(31)
2020	lwz	4,100(31)
2021	rotlwi	5,3,8
2022	rotlwi	28,4,8
2023	rlwimi	5,3,24,0,7
2024	rlwimi	28,4,24,0,7
2025	rlwimi	5,3,24,16,23
2026	rlwimi	28,4,24,16,23
2027	insrdi	28,5,32,0
2028	rotrdi	3,8,14
2029	rotrdi	4,8,18
2030	and	5,9,8
2031	xor	3,3,4
2032	add	11,11,0
2033	andc	0,10,8
2034	rotrdi	4,4,23
2035	or	5,5,0
2036	add	11,11,28
2037	xor	3,3,4
2038	add	11,11,5
2039	add	11,11,3
2040
2041	rotrdi	3,12,28
2042	rotrdi	4,12,34
2043	and	5,12,6
2044	and	0,12,14
2045	xor	3,3,4
2046	rotrdi	4,4,5
2047	xor	5,5,0
2048	and	0,6,14
2049	xor	3,3,4
2050	add	15,15,11
2051	xor	5,5,0
2052	ld	0,104(7)
2053	add	11,11,3
2054	add	11,11,5
2055
2056	lwz	3,104(31)
2057	lwz	4,108(31)
2058	rotlwi	5,3,8
2059	rotlwi	29,4,8
2060	rlwimi	5,3,24,0,7
2061	rlwimi	29,4,24,0,7
2062	rlwimi	5,3,24,16,23
2063	rlwimi	29,4,24,16,23
2064	insrdi	29,5,32,0
2065	rotrdi	3,15,14
2066	rotrdi	4,15,18
2067	and	5,8,15
2068	xor	3,3,4
2069	add	10,10,0
2070	andc	0,9,15
2071	rotrdi	4,4,23
2072	or	5,5,0
2073	add	10,10,29
2074	xor	3,3,4
2075	add	10,10,5
2076	add	10,10,3
2077
2078	rotrdi	3,11,28
2079	rotrdi	4,11,34
2080	and	5,11,12
2081	and	0,11,6
2082	xor	3,3,4
2083	rotrdi	4,4,5
2084	xor	5,5,0
2085	and	0,12,6
2086	xor	3,3,4
2087	add	14,14,10
2088	xor	5,5,0
2089	ld	0,112(7)
2090	add	10,10,3
2091	add	10,10,5
2092
2093	lwz	3,112(31)
2094	lwz	4,116(31)
2095	rotlwi	5,3,8
2096	rotlwi	30,4,8
2097	rlwimi	5,3,24,0,7
2098	rlwimi	30,4,24,0,7
2099	rlwimi	5,3,24,16,23
2100	rlwimi	30,4,24,16,23
2101	insrdi	30,5,32,0
2102	rotrdi	3,14,14
2103	rotrdi	4,14,18
2104	and	5,15,14
2105	xor	3,3,4
2106	add	9,9,0
2107	andc	0,8,14
2108	rotrdi	4,4,23
2109	or	5,5,0
2110	add	9,9,30
2111	xor	3,3,4
2112	add	9,9,5
2113	add	9,9,3
2114
2115	rotrdi	3,10,28
2116	rotrdi	4,10,34
2117	and	5,10,11
2118	and	0,10,12
2119	xor	3,3,4
2120	rotrdi	4,4,5
2121	xor	5,5,0
2122	and	0,11,12
2123	xor	3,3,4
2124	add	6,6,9
2125	xor	5,5,0
2126	ld	0,120(7)
2127	add	9,9,3
2128	add	9,9,5
2129
2130	lwz	3,120(31)
2131	lwz	4,124(31)
2132	rotlwi	5,3,8
2133	rotlwi	31,4,8
2134	rlwimi	5,3,24,0,7
2135	rlwimi	31,4,24,0,7
2136	rlwimi	5,3,24,16,23
2137	rlwimi	31,4,24,16,23
2138	insrdi	31,5,32,0
2139	rotrdi	3,6,14
2140	rotrdi	4,6,18
2141	and	5,14,6
2142	xor	3,3,4
2143	add	8,8,0
2144	andc	0,15,6
2145	rotrdi	4,4,23
2146	or	5,5,0
2147	add	8,8,31
2148	xor	3,3,4
2149	add	8,8,5
2150	add	8,8,3
2151
2152	rotrdi	3,9,28
2153	rotrdi	4,9,34
2154	and	5,9,10
2155	and	0,9,11
2156	xor	3,3,4
2157	rotrdi	4,4,5
2158	xor	5,5,0
2159	and	0,10,11
2160	xor	3,3,4
2161	add	12,12,8
2162	xor	5,5,0
2163	add	8,8,3
2164	add	8,8,5
2165
2166	li	5,4
2167	mtctr	5
2168.align	4
2169.Lrounds:
2170	addi	7,7,128
2171	rotrdi	3,17,1
2172	rotrdi	4,17,8
2173	rotrdi	5,30,19
2174	rotrdi	0,30,61
2175	xor	3,3,4
2176	srdi	4,17,7
2177	xor	5,5,0
2178	srdi	0,30,6
2179	add	16,16,25
2180	xor	3,3,4
2181	xor	5,5,0
2182	ld	0,0(7)
2183	add	16,16,3
2184	add	16,16,5
2185	rotrdi	3,12,14
2186	rotrdi	4,12,18
2187	and	5,6,12
2188	xor	3,3,4
2189	add	15,15,0
2190	andc	0,14,12
2191	rotrdi	4,4,23
2192	or	5,5,0
2193	add	15,15,16
2194	xor	3,3,4
2195	add	15,15,5
2196	add	15,15,3
2197
2198	rotrdi	3,8,28
2199	rotrdi	4,8,34
2200	and	5,8,9
2201	and	0,8,10
2202	xor	3,3,4
2203	rotrdi	4,4,5
2204	xor	5,5,0
2205	and	0,9,10
2206	xor	3,3,4
2207	add	11,11,15
2208	xor	5,5,0
2209	add	15,15,3
2210	add	15,15,5
2211
2212	rotrdi	3,18,1
2213	rotrdi	4,18,8
2214	rotrdi	5,31,19
2215	rotrdi	0,31,61
2216	xor	3,3,4
2217	srdi	4,18,7
2218	xor	5,5,0
2219	srdi	0,31,6
2220	add	17,17,26
2221	xor	3,3,4
2222	xor	5,5,0
2223	ld	0,8(7)
2224	add	17,17,3
2225	add	17,17,5
2226	rotrdi	3,11,14
2227	rotrdi	4,11,18
2228	and	5,12,11
2229	xor	3,3,4
2230	add	14,14,0
2231	andc	0,6,11
2232	rotrdi	4,4,23
2233	or	5,5,0
2234	add	14,14,17
2235	xor	3,3,4
2236	add	14,14,5
2237	add	14,14,3
2238
2239	rotrdi	3,15,28
2240	rotrdi	4,15,34
2241	and	5,15,8
2242	and	0,15,9
2243	xor	3,3,4
2244	rotrdi	4,4,5
2245	xor	5,5,0
2246	and	0,8,9
2247	xor	3,3,4
2248	add	10,10,14
2249	xor	5,5,0
2250	add	14,14,3
2251	add	14,14,5
2252
2253	rotrdi	3,19,1
2254	rotrdi	4,19,8
2255	rotrdi	5,16,19
2256	rotrdi	0,16,61
2257	xor	3,3,4
2258	srdi	4,19,7
2259	xor	5,5,0
2260	srdi	0,16,6
2261	add	18,18,27
2262	xor	3,3,4
2263	xor	5,5,0
2264	ld	0,16(7)
2265	add	18,18,3
2266	add	18,18,5
2267	rotrdi	3,10,14
2268	rotrdi	4,10,18
2269	and	5,11,10
2270	xor	3,3,4
2271	add	6,6,0
2272	andc	0,12,10
2273	rotrdi	4,4,23
2274	or	5,5,0
2275	add	6,6,18
2276	xor	3,3,4
2277	add	6,6,5
2278	add	6,6,3
2279
2280	rotrdi	3,14,28
2281	rotrdi	4,14,34
2282	and	5,14,15
2283	and	0,14,8
2284	xor	3,3,4
2285	rotrdi	4,4,5
2286	xor	5,5,0
2287	and	0,15,8
2288	xor	3,3,4
2289	add	9,9,6
2290	xor	5,5,0
2291	add	6,6,3
2292	add	6,6,5
2293
2294	rotrdi	3,20,1
2295	rotrdi	4,20,8
2296	rotrdi	5,17,19
2297	rotrdi	0,17,61
2298	xor	3,3,4
2299	srdi	4,20,7
2300	xor	5,5,0
2301	srdi	0,17,6
2302	add	19,19,28
2303	xor	3,3,4
2304	xor	5,5,0
2305	ld	0,24(7)
2306	add	19,19,3
2307	add	19,19,5
2308	rotrdi	3,9,14
2309	rotrdi	4,9,18
2310	and	5,10,9
2311	xor	3,3,4
2312	add	12,12,0
2313	andc	0,11,9
2314	rotrdi	4,4,23
2315	or	5,5,0
2316	add	12,12,19
2317	xor	3,3,4
2318	add	12,12,5
2319	add	12,12,3
2320
2321	rotrdi	3,6,28
2322	rotrdi	4,6,34
2323	and	5,6,14
2324	and	0,6,15
2325	xor	3,3,4
2326	rotrdi	4,4,5
2327	xor	5,5,0
2328	and	0,14,15
2329	xor	3,3,4
2330	add	8,8,12
2331	xor	5,5,0
2332	add	12,12,3
2333	add	12,12,5
2334
2335	rotrdi	3,21,1
2336	rotrdi	4,21,8
2337	rotrdi	5,18,19
2338	rotrdi	0,18,61
2339	xor	3,3,4
2340	srdi	4,21,7
2341	xor	5,5,0
2342	srdi	0,18,6
2343	add	20,20,29
2344	xor	3,3,4
2345	xor	5,5,0
2346	ld	0,32(7)
2347	add	20,20,3
2348	add	20,20,5
2349	rotrdi	3,8,14
2350	rotrdi	4,8,18
2351	and	5,9,8
2352	xor	3,3,4
2353	add	11,11,0
2354	andc	0,10,8
2355	rotrdi	4,4,23
2356	or	5,5,0
2357	add	11,11,20
2358	xor	3,3,4
2359	add	11,11,5
2360	add	11,11,3
2361
2362	rotrdi	3,12,28
2363	rotrdi	4,12,34
2364	and	5,12,6
2365	and	0,12,14
2366	xor	3,3,4
2367	rotrdi	4,4,5
2368	xor	5,5,0
2369	and	0,6,14
2370	xor	3,3,4
2371	add	15,15,11
2372	xor	5,5,0
2373	add	11,11,3
2374	add	11,11,5
2375
2376	rotrdi	3,22,1
2377	rotrdi	4,22,8
2378	rotrdi	5,19,19
2379	rotrdi	0,19,61
2380	xor	3,3,4
2381	srdi	4,22,7
2382	xor	5,5,0
2383	srdi	0,19,6
2384	add	21,21,30
2385	xor	3,3,4
2386	xor	5,5,0
2387	ld	0,40(7)
2388	add	21,21,3
2389	add	21,21,5
2390	rotrdi	3,15,14
2391	rotrdi	4,15,18
2392	and	5,8,15
2393	xor	3,3,4
2394	add	10,10,0
2395	andc	0,9,15
2396	rotrdi	4,4,23
2397	or	5,5,0
2398	add	10,10,21
2399	xor	3,3,4
2400	add	10,10,5
2401	add	10,10,3
2402
2403	rotrdi	3,11,28
2404	rotrdi	4,11,34
2405	and	5,11,12
2406	and	0,11,6
2407	xor	3,3,4
2408	rotrdi	4,4,5
2409	xor	5,5,0
2410	and	0,12,6
2411	xor	3,3,4
2412	add	14,14,10
2413	xor	5,5,0
2414	add	10,10,3
2415	add	10,10,5
2416
2417	rotrdi	3,23,1
2418	rotrdi	4,23,8
2419	rotrdi	5,20,19
2420	rotrdi	0,20,61
2421	xor	3,3,4
2422	srdi	4,23,7
2423	xor	5,5,0
2424	srdi	0,20,6
2425	add	22,22,31
2426	xor	3,3,4
2427	xor	5,5,0
2428	ld	0,48(7)
2429	add	22,22,3
2430	add	22,22,5
2431	rotrdi	3,14,14
2432	rotrdi	4,14,18
2433	and	5,15,14
2434	xor	3,3,4
2435	add	9,9,0
2436	andc	0,8,14
2437	rotrdi	4,4,23
2438	or	5,5,0
2439	add	9,9,22
2440	xor	3,3,4
2441	add	9,9,5
2442	add	9,9,3
2443
2444	rotrdi	3,10,28
2445	rotrdi	4,10,34
2446	and	5,10,11
2447	and	0,10,12
2448	xor	3,3,4
2449	rotrdi	4,4,5
2450	xor	5,5,0
2451	and	0,11,12
2452	xor	3,3,4
2453	add	6,6,9
2454	xor	5,5,0
2455	add	9,9,3
2456	add	9,9,5
2457
2458	rotrdi	3,24,1
2459	rotrdi	4,24,8
2460	rotrdi	5,21,19
2461	rotrdi	0,21,61
2462	xor	3,3,4
2463	srdi	4,24,7
2464	xor	5,5,0
2465	srdi	0,21,6
2466	add	23,23,16
2467	xor	3,3,4
2468	xor	5,5,0
2469	ld	0,56(7)
2470	add	23,23,3
2471	add	23,23,5
2472	rotrdi	3,6,14
2473	rotrdi	4,6,18
2474	and	5,14,6
2475	xor	3,3,4
2476	add	8,8,0
2477	andc	0,15,6
2478	rotrdi	4,4,23
2479	or	5,5,0
2480	add	8,8,23
2481	xor	3,3,4
2482	add	8,8,5
2483	add	8,8,3
2484
2485	rotrdi	3,9,28
2486	rotrdi	4,9,34
2487	and	5,9,10
2488	and	0,9,11
2489	xor	3,3,4
2490	rotrdi	4,4,5
2491	xor	5,5,0
2492	and	0,10,11
2493	xor	3,3,4
2494	add	12,12,8
2495	xor	5,5,0
2496	add	8,8,3
2497	add	8,8,5
2498
2499	rotrdi	3,25,1
2500	rotrdi	4,25,8
2501	rotrdi	5,22,19
2502	rotrdi	0,22,61
2503	xor	3,3,4
2504	srdi	4,25,7
2505	xor	5,5,0
2506	srdi	0,22,6
2507	add	24,24,17
2508	xor	3,3,4
2509	xor	5,5,0
2510	ld	0,64(7)
2511	add	24,24,3
2512	add	24,24,5
2513	rotrdi	3,12,14
2514	rotrdi	4,12,18
2515	and	5,6,12
2516	xor	3,3,4
2517	add	15,15,0
2518	andc	0,14,12
2519	rotrdi	4,4,23
2520	or	5,5,0
2521	add	15,15,24
2522	xor	3,3,4
2523	add	15,15,5
2524	add	15,15,3
2525
2526	rotrdi	3,8,28
2527	rotrdi	4,8,34
2528	and	5,8,9
2529	and	0,8,10
2530	xor	3,3,4
2531	rotrdi	4,4,5
2532	xor	5,5,0
2533	and	0,9,10
2534	xor	3,3,4
2535	add	11,11,15
2536	xor	5,5,0
2537	add	15,15,3
2538	add	15,15,5
2539
2540	rotrdi	3,26,1
2541	rotrdi	4,26,8
2542	rotrdi	5,23,19
2543	rotrdi	0,23,61
2544	xor	3,3,4
2545	srdi	4,26,7
2546	xor	5,5,0
2547	srdi	0,23,6
2548	add	25,25,18
2549	xor	3,3,4
2550	xor	5,5,0
2551	ld	0,72(7)
2552	add	25,25,3
2553	add	25,25,5
2554	rotrdi	3,11,14
2555	rotrdi	4,11,18
2556	and	5,12,11
2557	xor	3,3,4
2558	add	14,14,0
2559	andc	0,6,11
2560	rotrdi	4,4,23
2561	or	5,5,0
2562	add	14,14,25
2563	xor	3,3,4
2564	add	14,14,5
2565	add	14,14,3
2566
2567	rotrdi	3,15,28
2568	rotrdi	4,15,34
2569	and	5,15,8
2570	and	0,15,9
2571	xor	3,3,4
2572	rotrdi	4,4,5
2573	xor	5,5,0
2574	and	0,8,9
2575	xor	3,3,4
2576	add	10,10,14
2577	xor	5,5,0
2578	add	14,14,3
2579	add	14,14,5
2580
2581	rotrdi	3,27,1
2582	rotrdi	4,27,8
2583	rotrdi	5,24,19
2584	rotrdi	0,24,61
2585	xor	3,3,4
2586	srdi	4,27,7
2587	xor	5,5,0
2588	srdi	0,24,6
2589	add	26,26,19
2590	xor	3,3,4
2591	xor	5,5,0
2592	ld	0,80(7)
2593	add	26,26,3
2594	add	26,26,5
2595	rotrdi	3,10,14
2596	rotrdi	4,10,18
2597	and	5,11,10
2598	xor	3,3,4
2599	add	6,6,0
2600	andc	0,12,10
2601	rotrdi	4,4,23
2602	or	5,5,0
2603	add	6,6,26
2604	xor	3,3,4
2605	add	6,6,5
2606	add	6,6,3
2607
2608	rotrdi	3,14,28
2609	rotrdi	4,14,34
2610	and	5,14,15
2611	and	0,14,8
2612	xor	3,3,4
2613	rotrdi	4,4,5
2614	xor	5,5,0
2615	and	0,15,8
2616	xor	3,3,4
2617	add	9,9,6
2618	xor	5,5,0
2619	add	6,6,3
2620	add	6,6,5
2621
2622	rotrdi	3,28,1
2623	rotrdi	4,28,8
2624	rotrdi	5,25,19
2625	rotrdi	0,25,61
2626	xor	3,3,4
2627	srdi	4,28,7
2628	xor	5,5,0
2629	srdi	0,25,6
2630	add	27,27,20
2631	xor	3,3,4
2632	xor	5,5,0
2633	ld	0,88(7)
2634	add	27,27,3
2635	add	27,27,5
2636	rotrdi	3,9,14
2637	rotrdi	4,9,18
2638	and	5,10,9
2639	xor	3,3,4
2640	add	12,12,0
2641	andc	0,11,9
2642	rotrdi	4,4,23
2643	or	5,5,0
2644	add	12,12,27
2645	xor	3,3,4
2646	add	12,12,5
2647	add	12,12,3
2648
2649	rotrdi	3,6,28
2650	rotrdi	4,6,34
2651	and	5,6,14
2652	and	0,6,15
2653	xor	3,3,4
2654	rotrdi	4,4,5
2655	xor	5,5,0
2656	and	0,14,15
2657	xor	3,3,4
2658	add	8,8,12
2659	xor	5,5,0
2660	add	12,12,3
2661	add	12,12,5
2662
2663	rotrdi	3,29,1
2664	rotrdi	4,29,8
2665	rotrdi	5,26,19
2666	rotrdi	0,26,61
2667	xor	3,3,4
2668	srdi	4,29,7
2669	xor	5,5,0
2670	srdi	0,26,6
2671	add	28,28,21
2672	xor	3,3,4
2673	xor	5,5,0
2674	ld	0,96(7)
2675	add	28,28,3
2676	add	28,28,5
2677	rotrdi	3,8,14
2678	rotrdi	4,8,18
2679	and	5,9,8
2680	xor	3,3,4
2681	add	11,11,0
2682	andc	0,10,8
2683	rotrdi	4,4,23
2684	or	5,5,0
2685	add	11,11,28
2686	xor	3,3,4
2687	add	11,11,5
2688	add	11,11,3
2689
2690	rotrdi	3,12,28
2691	rotrdi	4,12,34
2692	and	5,12,6
2693	and	0,12,14
2694	xor	3,3,4
2695	rotrdi	4,4,5
2696	xor	5,5,0
2697	and	0,6,14
2698	xor	3,3,4
2699	add	15,15,11
2700	xor	5,5,0
2701	add	11,11,3
2702	add	11,11,5
2703
2704	rotrdi	3,30,1
2705	rotrdi	4,30,8
2706	rotrdi	5,27,19
2707	rotrdi	0,27,61
2708	xor	3,3,4
2709	srdi	4,30,7
2710	xor	5,5,0
2711	srdi	0,27,6
2712	add	29,29,22
2713	xor	3,3,4
2714	xor	5,5,0
2715	ld	0,104(7)
2716	add	29,29,3
2717	add	29,29,5
2718	rotrdi	3,15,14
2719	rotrdi	4,15,18
2720	and	5,8,15
2721	xor	3,3,4
2722	add	10,10,0
2723	andc	0,9,15
2724	rotrdi	4,4,23
2725	or	5,5,0
2726	add	10,10,29
2727	xor	3,3,4
2728	add	10,10,5
2729	add	10,10,3
2730
2731	rotrdi	3,11,28
2732	rotrdi	4,11,34
2733	and	5,11,12
2734	and	0,11,6
2735	xor	3,3,4
2736	rotrdi	4,4,5
2737	xor	5,5,0
2738	and	0,12,6
2739	xor	3,3,4
2740	add	14,14,10
2741	xor	5,5,0
2742	add	10,10,3
2743	add	10,10,5
2744
2745	rotrdi	3,31,1
2746	rotrdi	4,31,8
2747	rotrdi	5,28,19
2748	rotrdi	0,28,61
2749	xor	3,3,4
2750	srdi	4,31,7
2751	xor	5,5,0
2752	srdi	0,28,6
2753	add	30,30,23
2754	xor	3,3,4
2755	xor	5,5,0
2756	ld	0,112(7)
2757	add	30,30,3
2758	add	30,30,5
2759	rotrdi	3,14,14
2760	rotrdi	4,14,18
2761	and	5,15,14
2762	xor	3,3,4
2763	add	9,9,0
2764	andc	0,8,14
2765	rotrdi	4,4,23
2766	or	5,5,0
2767	add	9,9,30
2768	xor	3,3,4
2769	add	9,9,5
2770	add	9,9,3
2771
2772	rotrdi	3,10,28
2773	rotrdi	4,10,34
2774	and	5,10,11
2775	and	0,10,12
2776	xor	3,3,4
2777	rotrdi	4,4,5
2778	xor	5,5,0
2779	and	0,11,12
2780	xor	3,3,4
2781	add	6,6,9
2782	xor	5,5,0
2783	add	9,9,3
2784	add	9,9,5
2785
2786	rotrdi	3,16,1
2787	rotrdi	4,16,8
2788	rotrdi	5,29,19
2789	rotrdi	0,29,61
2790	xor	3,3,4
2791	srdi	4,16,7
2792	xor	5,5,0
2793	srdi	0,29,6
2794	add	31,31,24
2795	xor	3,3,4
2796	xor	5,5,0
2797	ld	0,120(7)
2798	add	31,31,3
2799	add	31,31,5
2800	rotrdi	3,6,14
2801	rotrdi	4,6,18
2802	and	5,14,6
2803	xor	3,3,4
2804	add	8,8,0
2805	andc	0,15,6
2806	rotrdi	4,4,23
2807	or	5,5,0
2808	add	8,8,31
2809	xor	3,3,4
2810	add	8,8,5
2811	add	8,8,3
2812
2813	rotrdi	3,9,28
2814	rotrdi	4,9,34
2815	and	5,9,10
2816	and	0,9,11
2817	xor	3,3,4
2818	rotrdi	4,4,5
2819	xor	5,5,0
2820	and	0,10,11
2821	xor	3,3,4
2822	add	12,12,8
2823	xor	5,5,0
2824	add	8,8,3
2825	add	8,8,5
2826
2827	bdnz	.Lrounds
2828
2829	ld	3,208(1)
2830	ld	31,200(1)
2831	ld	5,192(1)
2832	subi	7,7,512
2833
2834	ld	16,0(3)
2835	ld	17,8(3)
2836	ld	18,16(3)
2837	ld	19,24(3)
2838	ld	20,32(3)
2839	ld	21,40(3)
2840	ld	22,48(3)
2841	addi	31,31,128
2842	ld	23,56(3)
2843	add	8,8,16
2844	add	9,9,17
2845	std	31,200(1)
2846	add	10,10,18
2847	std	8,0(3)
2848	add	11,11,19
2849	std	9,8(3)
2850	add	12,12,20
2851	std	10,16(3)
2852	add	6,6,21
2853	std	11,24(3)
2854	add	14,14,22
2855	std	12,32(3)
2856	add	15,15,23
2857	std	6,40(3)
2858	std	14,48(3)
2859	cmpld	31,5
2860	std	15,56(3)
2861	bne	.Lsha2_block_private
2862	blr
2863.long	0
2864.byte	0,12,0x14,0,0,0,0,0
2865.size	zfs_sha512_ppc,.-zfs_sha512_ppc
2866.align	6
2867.LPICmeup:
2868	mflr	0
2869	bcl	20,31,$+4
2870	mflr	7
2871	addi	7,7,56
2872	mtlr	0
2873	blr
2874.long	0
2875.byte	0,12,0x14,0,0,0,0,0
2876.space	28
2877.long	0xd728ae22,0x428a2f98
2878.long	0x23ef65cd,0x71374491
2879.long	0xec4d3b2f,0xb5c0fbcf
2880.long	0x8189dbbc,0xe9b5dba5
2881.long	0xf348b538,0x3956c25b
2882.long	0xb605d019,0x59f111f1
2883.long	0xaf194f9b,0x923f82a4
2884.long	0xda6d8118,0xab1c5ed5
2885.long	0xa3030242,0xd807aa98
2886.long	0x45706fbe,0x12835b01
2887.long	0x4ee4b28c,0x243185be
2888.long	0xd5ffb4e2,0x550c7dc3
2889.long	0xf27b896f,0x72be5d74
2890.long	0x3b1696b1,0x80deb1fe
2891.long	0x25c71235,0x9bdc06a7
2892.long	0xcf692694,0xc19bf174
2893.long	0x9ef14ad2,0xe49b69c1
2894.long	0x384f25e3,0xefbe4786
2895.long	0x8b8cd5b5,0x0fc19dc6
2896.long	0x77ac9c65,0x240ca1cc
2897.long	0x592b0275,0x2de92c6f
2898.long	0x6ea6e483,0x4a7484aa
2899.long	0xbd41fbd4,0x5cb0a9dc
2900.long	0x831153b5,0x76f988da
2901.long	0xee66dfab,0x983e5152
2902.long	0x2db43210,0xa831c66d
2903.long	0x98fb213f,0xb00327c8
2904.long	0xbeef0ee4,0xbf597fc7
2905.long	0x3da88fc2,0xc6e00bf3
2906.long	0x930aa725,0xd5a79147
2907.long	0xe003826f,0x06ca6351
2908.long	0x0a0e6e70,0x14292967
2909.long	0x46d22ffc,0x27b70a85
2910.long	0x5c26c926,0x2e1b2138
2911.long	0x5ac42aed,0x4d2c6dfc
2912.long	0x9d95b3df,0x53380d13
2913.long	0x8baf63de,0x650a7354
2914.long	0x3c77b2a8,0x766a0abb
2915.long	0x47edaee6,0x81c2c92e
2916.long	0x1482353b,0x92722c85
2917.long	0x4cf10364,0xa2bfe8a1
2918.long	0xbc423001,0xa81a664b
2919.long	0xd0f89791,0xc24b8b70
2920.long	0x0654be30,0xc76c51a3
2921.long	0xd6ef5218,0xd192e819
2922.long	0x5565a910,0xd6990624
2923.long	0x5771202a,0xf40e3585
2924.long	0x32bbd1b8,0x106aa070
2925.long	0xb8d2d0c8,0x19a4c116
2926.long	0x5141ab53,0x1e376c08
2927.long	0xdf8eeb99,0x2748774c
2928.long	0xe19b48a8,0x34b0bcb5
2929.long	0xc5c95a63,0x391c0cb3
2930.long	0xe3418acb,0x4ed8aa4a
2931.long	0x7763e373,0x5b9cca4f
2932.long	0xd6b2b8a3,0x682e6ff3
2933.long	0x5defb2fc,0x748f82ee
2934.long	0x43172f60,0x78a5636f
2935.long	0xa1f0ab72,0x84c87814
2936.long	0x1a6439ec,0x8cc70208
2937.long	0x23631e28,0x90befffa
2938.long	0xde82bde9,0xa4506ceb
2939.long	0xb2c67915,0xbef9a3f7
2940.long	0xe372532b,0xc67178f2
2941.long	0xea26619c,0xca273ece
2942.long	0x21c0c207,0xd186b8c7
2943.long	0xcde0eb1e,0xeada7dd6
2944.long	0xee6ed178,0xf57d4f7f
2945.long	0x72176fba,0x06f067aa
2946.long	0xa2c898a6,0x0a637dc5
2947.long	0xbef90dae,0x113f9804
2948.long	0x131c471b,0x1b710b35
2949.long	0x23047d84,0x28db77f5
2950.long	0x40c72493,0x32caab7b
2951.long	0x15c9bebc,0x3c9ebe0a
2952.long	0x9c100d4c,0x431d67c4
2953.long	0xcb3e42b6,0x4cc5d4be
2954.long	0xfc657e2a,0x597f299c
2955.long	0x3ad6faec,0x5fcb6fab
2956.long	0x4a475817,0x6c44198c
2957
2958#endif
2959