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