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