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