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