xref: /freebsd/sys/contrib/openzfs/module/icp/asm-ppc64/sha2/sha256-p8.S (revision a03411e84728e9b267056fd31c7d1d9d1dc1b01e)
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_power8
28.globl	.zfs_sha256_power8
29.type	zfs_sha256_power8,@function
30.section	".opd","aw"
31.align	3
32zfs_sha256_power8:
33.quad	.zfs_sha256_power8,.TOC.@tocbase,0
34.previous
35.align	6
36.zfs_sha256_power8:
37#else
38.abiversion	2
39.text
40
41.globl	zfs_sha256_power8
42.type	zfs_sha256_power8,@function
43.align	6
44zfs_sha256_power8:
45.localentry	zfs_sha256_power8,0
46#endif
47	stdu	1,-384(1)
48	mflr	8
49	li	10,207
50	li	11,223
51	stvx	24,10,1
52	addi	10,10,32
53	mfspr	12,256
54	stvx	25,11,1
55	addi	11,11,32
56	stvx	26,10,1
57	addi	10,10,32
58	stvx	27,11,1
59	addi	11,11,32
60	stvx	28,10,1
61	addi	10,10,32
62	stvx	29,11,1
63	addi	11,11,32
64	stvx	30,10,1
65	stvx	31,11,1
66	li	11,-4096+255
67	stw	12,332(1)
68	li	10,0x10
69	std	26,336(1)
70	li	26,0x20
71	std	27,344(1)
72	li	27,0x30
73	std	28,352(1)
74	li	28,0x40
75	std	29,360(1)
76	li	29,0x50
77	std	30,368(1)
78	li	30,0x60
79	std	31,376(1)
80	li	31,0x70
81	std	8,400(1)
82	mtspr	256,11
83
84	bl	.LPICmeup
85	addi	11,1,79
86	.long	0x7C001E19
87	.long	0x7C8A1E19
88	vsldoi	1,0,0,4
89	vsldoi	2,0,0,8
90	vsldoi	3,0,0,12
91	vsldoi	5,4,4,4
92	vsldoi	6,4,4,8
93	vsldoi	7,4,4,12
94	li	0,3
95	b	.Loop
96.align	5
97.Loop:
98	lvx	28,0,6
99	.long	0x7D002699
100	addi	4,4,16
101	mr	7,6
102	stvx	0,0,11
103	stvx	1,10,11
104	stvx	2,26,11
105	stvx	3,27,11
106	stvx	4,28,11
107	stvx	5,29,11
108	stvx	6,30,11
109	stvx	7,31,11
110	vadduwm	7,7,28
111	lvx	28,10,6
112	vadduwm	7,7,8
113	vsel	29,6,5,4
114	vadduwm	6,6,28
115	vadduwm	7,7,29
116	.long	0x13C4FE82
117	vadduwm	7,7,30
118	vxor	29,0,1
119	vsel	29,1,2,29
120	vadduwm	3,3,7
121	.long	0x13C08682
122	vadduwm	30,30,29
123	vadduwm	7,7,30
124	lvx	28,26,7
125	vsldoi	9,8,8,4
126	vadduwm	6,6,9
127	vsel	29,5,4,3
128	vadduwm	5,5,28
129	vadduwm	6,6,29
130	.long	0x13C3FE82
131	vadduwm	6,6,30
132	vxor	29,7,0
133	vsel	29,0,1,29
134	vadduwm	2,2,6
135	.long	0x13C78682
136	vadduwm	30,30,29
137	vadduwm	6,6,30
138	lvx	28,27,7
139	vsldoi	10,9,9,4
140	vadduwm	5,5,10
141	vsel	29,4,3,2
142	vadduwm	4,4,28
143	vadduwm	5,5,29
144	.long	0x13C2FE82
145	vadduwm	5,5,30
146	vxor	29,6,7
147	vsel	29,7,0,29
148	vadduwm	1,1,5
149	.long	0x13C68682
150	vadduwm	30,30,29
151	vadduwm	5,5,30
152	lvx	28,28,7
153	.long	0x7D802699
154	addi	4,4,16
155	vsldoi	11,10,10,4
156	vadduwm	4,4,11
157	vsel	29,3,2,1
158	vadduwm	3,3,28
159	vadduwm	4,4,29
160	.long	0x13C1FE82
161	vadduwm	4,4,30
162	vxor	29,5,6
163	vsel	29,6,7,29
164	vadduwm	0,0,4
165	.long	0x13C58682
166	vadduwm	30,30,29
167	vadduwm	4,4,30
168	lvx	28,29,7
169	vadduwm	3,3,12
170	vsel	29,2,1,0
171	vadduwm	2,2,28
172	vadduwm	3,3,29
173	.long	0x13C0FE82
174	vadduwm	3,3,30
175	vxor	29,4,5
176	vsel	29,5,6,29
177	vadduwm	7,7,3
178	.long	0x13C48682
179	vadduwm	30,30,29
180	vadduwm	3,3,30
181	lvx	28,30,7
182	vsldoi	13,12,12,4
183	vadduwm	2,2,13
184	vsel	29,1,0,7
185	vadduwm	1,1,28
186	vadduwm	2,2,29
187	.long	0x13C7FE82
188	vadduwm	2,2,30
189	vxor	29,3,4
190	vsel	29,4,5,29
191	vadduwm	6,6,2
192	.long	0x13C38682
193	vadduwm	30,30,29
194	vadduwm	2,2,30
195	lvx	28,31,7
196	addi	7,7,0x80
197	vsldoi	14,13,13,4
198	vadduwm	1,1,14
199	vsel	29,0,7,6
200	vadduwm	0,0,28
201	vadduwm	1,1,29
202	.long	0x13C6FE82
203	vadduwm	1,1,30
204	vxor	29,2,3
205	vsel	29,3,4,29
206	vadduwm	5,5,1
207	.long	0x13C28682
208	vadduwm	30,30,29
209	vadduwm	1,1,30
210	lvx	28,0,7
211	.long	0x7E002699
212	addi	4,4,16
213	vsldoi	15,14,14,4
214	vadduwm	0,0,15
215	vsel	29,7,6,5
216	vadduwm	7,7,28
217	vadduwm	0,0,29
218	.long	0x13C5FE82
219	vadduwm	0,0,30
220	vxor	29,1,2
221	vsel	29,2,3,29
222	vadduwm	4,4,0
223	.long	0x13C18682
224	vadduwm	30,30,29
225	vadduwm	0,0,30
226	lvx	28,10,7
227	vadduwm	7,7,16
228	vsel	29,6,5,4
229	vadduwm	6,6,28
230	vadduwm	7,7,29
231	.long	0x13C4FE82
232	vadduwm	7,7,30
233	vxor	29,0,1
234	vsel	29,1,2,29
235	vadduwm	3,3,7
236	.long	0x13C08682
237	vadduwm	30,30,29
238	vadduwm	7,7,30
239	lvx	28,26,7
240	vsldoi	17,16,16,4
241	vadduwm	6,6,17
242	vsel	29,5,4,3
243	vadduwm	5,5,28
244	vadduwm	6,6,29
245	.long	0x13C3FE82
246	vadduwm	6,6,30
247	vxor	29,7,0
248	vsel	29,0,1,29
249	vadduwm	2,2,6
250	.long	0x13C78682
251	vadduwm	30,30,29
252	vadduwm	6,6,30
253	lvx	28,27,7
254	vsldoi	18,17,17,4
255	vadduwm	5,5,18
256	vsel	29,4,3,2
257	vadduwm	4,4,28
258	vadduwm	5,5,29
259	.long	0x13C2FE82
260	vadduwm	5,5,30
261	vxor	29,6,7
262	vsel	29,7,0,29
263	vadduwm	1,1,5
264	.long	0x13C68682
265	vadduwm	30,30,29
266	vadduwm	5,5,30
267	lvx	28,28,7
268	.long	0x7F002699
269	addi	4,4,16
270	vsldoi	19,18,18,4
271	vadduwm	4,4,19
272	vsel	29,3,2,1
273	vadduwm	3,3,28
274	vadduwm	4,4,29
275	.long	0x13C1FE82
276	vadduwm	4,4,30
277	vxor	29,5,6
278	vsel	29,6,7,29
279	vadduwm	0,0,4
280	.long	0x13C58682
281	vadduwm	30,30,29
282	vadduwm	4,4,30
283	lvx	28,29,7
284	vadduwm	3,3,24
285	vsel	29,2,1,0
286	vadduwm	2,2,28
287	vadduwm	3,3,29
288	.long	0x13C0FE82
289	vadduwm	3,3,30
290	vxor	29,4,5
291	vsel	29,5,6,29
292	vadduwm	7,7,3
293	.long	0x13C48682
294	vadduwm	30,30,29
295	vadduwm	3,3,30
296	lvx	28,30,7
297	vsldoi	25,24,24,4
298	vadduwm	2,2,25
299	vsel	29,1,0,7
300	vadduwm	1,1,28
301	vadduwm	2,2,29
302	.long	0x13C7FE82
303	vadduwm	2,2,30
304	vxor	29,3,4
305	vsel	29,4,5,29
306	vadduwm	6,6,2
307	.long	0x13C38682
308	vadduwm	30,30,29
309	vadduwm	2,2,30
310	lvx	28,31,7
311	addi	7,7,0x80
312	vsldoi	26,25,25,4
313	vadduwm	1,1,26
314	vsel	29,0,7,6
315	vadduwm	0,0,28
316	vadduwm	1,1,29
317	.long	0x13C6FE82
318	vadduwm	1,1,30
319	vxor	29,2,3
320	vsel	29,3,4,29
321	vadduwm	5,5,1
322	.long	0x13C28682
323	vadduwm	30,30,29
324	vadduwm	1,1,30
325	lvx	28,0,7
326	vsldoi	27,26,26,4
327	.long	0x13C90682
328	vadduwm	8,8,30
329	.long	0x13DA7E82
330	vadduwm	8,8,30
331	vadduwm	8,8,17
332	vadduwm	0,0,27
333	vsel	29,7,6,5
334	vadduwm	7,7,28
335	vadduwm	0,0,29
336	.long	0x13C5FE82
337	vadduwm	0,0,30
338	vxor	29,1,2
339	vsel	29,2,3,29
340	vadduwm	4,4,0
341	.long	0x13C18682
342	vadduwm	30,30,29
343	vadduwm	0,0,30
344	lvx	28,10,7
345	mtctr	0
346	b	.L16_xx
347.align	5
348.L16_xx:
349	.long	0x13CA0682
350	vadduwm	9,9,30
351	.long	0x13DB7E82
352	vadduwm	9,9,30
353	vadduwm	9,9,18
354	vadduwm	7,7,8
355	vsel	29,6,5,4
356	vadduwm	6,6,28
357	vadduwm	7,7,29
358	.long	0x13C4FE82
359	vadduwm	7,7,30
360	vxor	29,0,1
361	vsel	29,1,2,29
362	vadduwm	3,3,7
363	.long	0x13C08682
364	vadduwm	30,30,29
365	vadduwm	7,7,30
366	lvx	28,26,7
367	.long	0x13CB0682
368	vadduwm	10,10,30
369	.long	0x13C87E82
370	vadduwm	10,10,30
371	vadduwm	10,10,19
372	vadduwm	6,6,9
373	vsel	29,5,4,3
374	vadduwm	5,5,28
375	vadduwm	6,6,29
376	.long	0x13C3FE82
377	vadduwm	6,6,30
378	vxor	29,7,0
379	vsel	29,0,1,29
380	vadduwm	2,2,6
381	.long	0x13C78682
382	vadduwm	30,30,29
383	vadduwm	6,6,30
384	lvx	28,27,7
385	.long	0x13CC0682
386	vadduwm	11,11,30
387	.long	0x13C97E82
388	vadduwm	11,11,30
389	vadduwm	11,11,24
390	vadduwm	5,5,10
391	vsel	29,4,3,2
392	vadduwm	4,4,28
393	vadduwm	5,5,29
394	.long	0x13C2FE82
395	vadduwm	5,5,30
396	vxor	29,6,7
397	vsel	29,7,0,29
398	vadduwm	1,1,5
399	.long	0x13C68682
400	vadduwm	30,30,29
401	vadduwm	5,5,30
402	lvx	28,28,7
403	.long	0x13CD0682
404	vadduwm	12,12,30
405	.long	0x13CA7E82
406	vadduwm	12,12,30
407	vadduwm	12,12,25
408	vadduwm	4,4,11
409	vsel	29,3,2,1
410	vadduwm	3,3,28
411	vadduwm	4,4,29
412	.long	0x13C1FE82
413	vadduwm	4,4,30
414	vxor	29,5,6
415	vsel	29,6,7,29
416	vadduwm	0,0,4
417	.long	0x13C58682
418	vadduwm	30,30,29
419	vadduwm	4,4,30
420	lvx	28,29,7
421	.long	0x13CE0682
422	vadduwm	13,13,30
423	.long	0x13CB7E82
424	vadduwm	13,13,30
425	vadduwm	13,13,26
426	vadduwm	3,3,12
427	vsel	29,2,1,0
428	vadduwm	2,2,28
429	vadduwm	3,3,29
430	.long	0x13C0FE82
431	vadduwm	3,3,30
432	vxor	29,4,5
433	vsel	29,5,6,29
434	vadduwm	7,7,3
435	.long	0x13C48682
436	vadduwm	30,30,29
437	vadduwm	3,3,30
438	lvx	28,30,7
439	.long	0x13CF0682
440	vadduwm	14,14,30
441	.long	0x13CC7E82
442	vadduwm	14,14,30
443	vadduwm	14,14,27
444	vadduwm	2,2,13
445	vsel	29,1,0,7
446	vadduwm	1,1,28
447	vadduwm	2,2,29
448	.long	0x13C7FE82
449	vadduwm	2,2,30
450	vxor	29,3,4
451	vsel	29,4,5,29
452	vadduwm	6,6,2
453	.long	0x13C38682
454	vadduwm	30,30,29
455	vadduwm	2,2,30
456	lvx	28,31,7
457	addi	7,7,0x80
458	.long	0x13D00682
459	vadduwm	15,15,30
460	.long	0x13CD7E82
461	vadduwm	15,15,30
462	vadduwm	15,15,8
463	vadduwm	1,1,14
464	vsel	29,0,7,6
465	vadduwm	0,0,28
466	vadduwm	1,1,29
467	.long	0x13C6FE82
468	vadduwm	1,1,30
469	vxor	29,2,3
470	vsel	29,3,4,29
471	vadduwm	5,5,1
472	.long	0x13C28682
473	vadduwm	30,30,29
474	vadduwm	1,1,30
475	lvx	28,0,7
476	.long	0x13D10682
477	vadduwm	16,16,30
478	.long	0x13CE7E82
479	vadduwm	16,16,30
480	vadduwm	16,16,9
481	vadduwm	0,0,15
482	vsel	29,7,6,5
483	vadduwm	7,7,28
484	vadduwm	0,0,29
485	.long	0x13C5FE82
486	vadduwm	0,0,30
487	vxor	29,1,2
488	vsel	29,2,3,29
489	vadduwm	4,4,0
490	.long	0x13C18682
491	vadduwm	30,30,29
492	vadduwm	0,0,30
493	lvx	28,10,7
494	.long	0x13D20682
495	vadduwm	17,17,30
496	.long	0x13CF7E82
497	vadduwm	17,17,30
498	vadduwm	17,17,10
499	vadduwm	7,7,16
500	vsel	29,6,5,4
501	vadduwm	6,6,28
502	vadduwm	7,7,29
503	.long	0x13C4FE82
504	vadduwm	7,7,30
505	vxor	29,0,1
506	vsel	29,1,2,29
507	vadduwm	3,3,7
508	.long	0x13C08682
509	vadduwm	30,30,29
510	vadduwm	7,7,30
511	lvx	28,26,7
512	.long	0x13D30682
513	vadduwm	18,18,30
514	.long	0x13D07E82
515	vadduwm	18,18,30
516	vadduwm	18,18,11
517	vadduwm	6,6,17
518	vsel	29,5,4,3
519	vadduwm	5,5,28
520	vadduwm	6,6,29
521	.long	0x13C3FE82
522	vadduwm	6,6,30
523	vxor	29,7,0
524	vsel	29,0,1,29
525	vadduwm	2,2,6
526	.long	0x13C78682
527	vadduwm	30,30,29
528	vadduwm	6,6,30
529	lvx	28,27,7
530	.long	0x13D80682
531	vadduwm	19,19,30
532	.long	0x13D17E82
533	vadduwm	19,19,30
534	vadduwm	19,19,12
535	vadduwm	5,5,18
536	vsel	29,4,3,2
537	vadduwm	4,4,28
538	vadduwm	5,5,29
539	.long	0x13C2FE82
540	vadduwm	5,5,30
541	vxor	29,6,7
542	vsel	29,7,0,29
543	vadduwm	1,1,5
544	.long	0x13C68682
545	vadduwm	30,30,29
546	vadduwm	5,5,30
547	lvx	28,28,7
548	.long	0x13D90682
549	vadduwm	24,24,30
550	.long	0x13D27E82
551	vadduwm	24,24,30
552	vadduwm	24,24,13
553	vadduwm	4,4,19
554	vsel	29,3,2,1
555	vadduwm	3,3,28
556	vadduwm	4,4,29
557	.long	0x13C1FE82
558	vadduwm	4,4,30
559	vxor	29,5,6
560	vsel	29,6,7,29
561	vadduwm	0,0,4
562	.long	0x13C58682
563	vadduwm	30,30,29
564	vadduwm	4,4,30
565	lvx	28,29,7
566	.long	0x13DA0682
567	vadduwm	25,25,30
568	.long	0x13D37E82
569	vadduwm	25,25,30
570	vadduwm	25,25,14
571	vadduwm	3,3,24
572	vsel	29,2,1,0
573	vadduwm	2,2,28
574	vadduwm	3,3,29
575	.long	0x13C0FE82
576	vadduwm	3,3,30
577	vxor	29,4,5
578	vsel	29,5,6,29
579	vadduwm	7,7,3
580	.long	0x13C48682
581	vadduwm	30,30,29
582	vadduwm	3,3,30
583	lvx	28,30,7
584	.long	0x13DB0682
585	vadduwm	26,26,30
586	.long	0x13D87E82
587	vadduwm	26,26,30
588	vadduwm	26,26,15
589	vadduwm	2,2,25
590	vsel	29,1,0,7
591	vadduwm	1,1,28
592	vadduwm	2,2,29
593	.long	0x13C7FE82
594	vadduwm	2,2,30
595	vxor	29,3,4
596	vsel	29,4,5,29
597	vadduwm	6,6,2
598	.long	0x13C38682
599	vadduwm	30,30,29
600	vadduwm	2,2,30
601	lvx	28,31,7
602	addi	7,7,0x80
603	.long	0x13C80682
604	vadduwm	27,27,30
605	.long	0x13D97E82
606	vadduwm	27,27,30
607	vadduwm	27,27,16
608	vadduwm	1,1,26
609	vsel	29,0,7,6
610	vadduwm	0,0,28
611	vadduwm	1,1,29
612	.long	0x13C6FE82
613	vadduwm	1,1,30
614	vxor	29,2,3
615	vsel	29,3,4,29
616	vadduwm	5,5,1
617	.long	0x13C28682
618	vadduwm	30,30,29
619	vadduwm	1,1,30
620	lvx	28,0,7
621	.long	0x13C90682
622	vadduwm	8,8,30
623	.long	0x13DA7E82
624	vadduwm	8,8,30
625	vadduwm	8,8,17
626	vadduwm	0,0,27
627	vsel	29,7,6,5
628	vadduwm	7,7,28
629	vadduwm	0,0,29
630	.long	0x13C5FE82
631	vadduwm	0,0,30
632	vxor	29,1,2
633	vsel	29,2,3,29
634	vadduwm	4,4,0
635	.long	0x13C18682
636	vadduwm	30,30,29
637	vadduwm	0,0,30
638	lvx	28,10,7
639	bdnz	.L16_xx
640
641	lvx	10,0,11
642	subic.	5,5,1
643	lvx	11,10,11
644	vadduwm	0,0,10
645	lvx	12,26,11
646	vadduwm	1,1,11
647	lvx	13,27,11
648	vadduwm	2,2,12
649	lvx	14,28,11
650	vadduwm	3,3,13
651	lvx	15,29,11
652	vadduwm	4,4,14
653	lvx	16,30,11
654	vadduwm	5,5,15
655	lvx	17,31,11
656	vadduwm	6,6,16
657	vadduwm	7,7,17
658	bne	.Loop
659	lvx	8,26,7
660	vperm	0,0,1,28
661	lvx	9,27,7
662	vperm	4,4,5,28
663	vperm	0,0,2,8
664	vperm	4,4,6,8
665	vperm	0,0,3,9
666	vperm	4,4,7,9
667	.long	0x7C001F19
668	.long	0x7C8A1F19
669	addi	11,1,207
670	mtlr	8
671	mtspr	256,12
672	lvx	24,0,11
673	lvx	25,10,11
674	lvx	26,26,11
675	lvx	27,27,11
676	lvx	28,28,11
677	lvx	29,29,11
678	lvx	30,30,11
679	lvx	31,31,11
680	ld	26,336(1)
681	ld	27,344(1)
682	ld	28,352(1)
683	ld	29,360(1)
684	ld	30,368(1)
685	ld	31,376(1)
686	addi	1,1,384
687	blr
688.long	0
689.byte	0,12,4,1,0x80,6,3,0
690.long	0
691#if (!defined(_CALL_ELF) || _CALL_ELF == 1)
692.size	.zfs_sha256_power8,.-.zfs_sha256_power8
693.size	zfs_sha256_power8,.-.zfs_sha256_power8
694#else
695.size	zfs_sha256_power8,.-zfs_sha256_power8
696#endif
697.align	6
698.LPICmeup:
699	mflr	0
700	bcl	20,31,$+4
701	mflr	6
702	addi	6,6,56
703	mtlr	0
704	blr
705.long	0
706.byte	0,12,0x14,0,0,0,0,0
707.space	28
708.long	0x428a2f98,0x428a2f98,0x428a2f98,0x428a2f98
709.long	0x71374491,0x71374491,0x71374491,0x71374491
710.long	0xb5c0fbcf,0xb5c0fbcf,0xb5c0fbcf,0xb5c0fbcf
711.long	0xe9b5dba5,0xe9b5dba5,0xe9b5dba5,0xe9b5dba5
712.long	0x3956c25b,0x3956c25b,0x3956c25b,0x3956c25b
713.long	0x59f111f1,0x59f111f1,0x59f111f1,0x59f111f1
714.long	0x923f82a4,0x923f82a4,0x923f82a4,0x923f82a4
715.long	0xab1c5ed5,0xab1c5ed5,0xab1c5ed5,0xab1c5ed5
716.long	0xd807aa98,0xd807aa98,0xd807aa98,0xd807aa98
717.long	0x12835b01,0x12835b01,0x12835b01,0x12835b01
718.long	0x243185be,0x243185be,0x243185be,0x243185be
719.long	0x550c7dc3,0x550c7dc3,0x550c7dc3,0x550c7dc3
720.long	0x72be5d74,0x72be5d74,0x72be5d74,0x72be5d74
721.long	0x80deb1fe,0x80deb1fe,0x80deb1fe,0x80deb1fe
722.long	0x9bdc06a7,0x9bdc06a7,0x9bdc06a7,0x9bdc06a7
723.long	0xc19bf174,0xc19bf174,0xc19bf174,0xc19bf174
724.long	0xe49b69c1,0xe49b69c1,0xe49b69c1,0xe49b69c1
725.long	0xefbe4786,0xefbe4786,0xefbe4786,0xefbe4786
726.long	0x0fc19dc6,0x0fc19dc6,0x0fc19dc6,0x0fc19dc6
727.long	0x240ca1cc,0x240ca1cc,0x240ca1cc,0x240ca1cc
728.long	0x2de92c6f,0x2de92c6f,0x2de92c6f,0x2de92c6f
729.long	0x4a7484aa,0x4a7484aa,0x4a7484aa,0x4a7484aa
730.long	0x5cb0a9dc,0x5cb0a9dc,0x5cb0a9dc,0x5cb0a9dc
731.long	0x76f988da,0x76f988da,0x76f988da,0x76f988da
732.long	0x983e5152,0x983e5152,0x983e5152,0x983e5152
733.long	0xa831c66d,0xa831c66d,0xa831c66d,0xa831c66d
734.long	0xb00327c8,0xb00327c8,0xb00327c8,0xb00327c8
735.long	0xbf597fc7,0xbf597fc7,0xbf597fc7,0xbf597fc7
736.long	0xc6e00bf3,0xc6e00bf3,0xc6e00bf3,0xc6e00bf3
737.long	0xd5a79147,0xd5a79147,0xd5a79147,0xd5a79147
738.long	0x06ca6351,0x06ca6351,0x06ca6351,0x06ca6351
739.long	0x14292967,0x14292967,0x14292967,0x14292967
740.long	0x27b70a85,0x27b70a85,0x27b70a85,0x27b70a85
741.long	0x2e1b2138,0x2e1b2138,0x2e1b2138,0x2e1b2138
742.long	0x4d2c6dfc,0x4d2c6dfc,0x4d2c6dfc,0x4d2c6dfc
743.long	0x53380d13,0x53380d13,0x53380d13,0x53380d13
744.long	0x650a7354,0x650a7354,0x650a7354,0x650a7354
745.long	0x766a0abb,0x766a0abb,0x766a0abb,0x766a0abb
746.long	0x81c2c92e,0x81c2c92e,0x81c2c92e,0x81c2c92e
747.long	0x92722c85,0x92722c85,0x92722c85,0x92722c85
748.long	0xa2bfe8a1,0xa2bfe8a1,0xa2bfe8a1,0xa2bfe8a1
749.long	0xa81a664b,0xa81a664b,0xa81a664b,0xa81a664b
750.long	0xc24b8b70,0xc24b8b70,0xc24b8b70,0xc24b8b70
751.long	0xc76c51a3,0xc76c51a3,0xc76c51a3,0xc76c51a3
752.long	0xd192e819,0xd192e819,0xd192e819,0xd192e819
753.long	0xd6990624,0xd6990624,0xd6990624,0xd6990624
754.long	0xf40e3585,0xf40e3585,0xf40e3585,0xf40e3585
755.long	0x106aa070,0x106aa070,0x106aa070,0x106aa070
756.long	0x19a4c116,0x19a4c116,0x19a4c116,0x19a4c116
757.long	0x1e376c08,0x1e376c08,0x1e376c08,0x1e376c08
758.long	0x2748774c,0x2748774c,0x2748774c,0x2748774c
759.long	0x34b0bcb5,0x34b0bcb5,0x34b0bcb5,0x34b0bcb5
760.long	0x391c0cb3,0x391c0cb3,0x391c0cb3,0x391c0cb3
761.long	0x4ed8aa4a,0x4ed8aa4a,0x4ed8aa4a,0x4ed8aa4a
762.long	0x5b9cca4f,0x5b9cca4f,0x5b9cca4f,0x5b9cca4f
763.long	0x682e6ff3,0x682e6ff3,0x682e6ff3,0x682e6ff3
764.long	0x748f82ee,0x748f82ee,0x748f82ee,0x748f82ee
765.long	0x78a5636f,0x78a5636f,0x78a5636f,0x78a5636f
766.long	0x84c87814,0x84c87814,0x84c87814,0x84c87814
767.long	0x8cc70208,0x8cc70208,0x8cc70208,0x8cc70208
768.long	0x90befffa,0x90befffa,0x90befffa,0x90befffa
769.long	0xa4506ceb,0xa4506ceb,0xa4506ceb,0xa4506ceb
770.long	0xbef9a3f7,0xbef9a3f7,0xbef9a3f7,0xbef9a3f7
771.long	0xc67178f2,0xc67178f2,0xc67178f2,0xc67178f2
772.long	0,0,0,0
773.long	0x00010203,0x10111213,0x10111213,0x10111213
774.long	0x00010203,0x04050607,0x10111213,0x10111213
775.long	0x00010203,0x04050607,0x08090a0b,0x10111213
776
777#elif (defined(__PPC64__) && defined(__LITTLE_ENDIAN__))
778
779.abiversion	2
780.text
781
782.globl	zfs_sha256_power8
783.type	zfs_sha256_power8,@function
784.align	6
785zfs_sha256_power8:
786.localentry	zfs_sha256_power8,0
787
788	stdu	1,-384(1)
789	mflr	8
790	li	10,207
791	li	11,223
792	stvx	24,10,1
793	addi	10,10,32
794	li	12,-1
795	stvx	25,11,1
796	addi	11,11,32
797	stvx	26,10,1
798	addi	10,10,32
799	stvx	27,11,1
800	addi	11,11,32
801	stvx	28,10,1
802	addi	10,10,32
803	stvx	29,11,1
804	addi	11,11,32
805	stvx	30,10,1
806	stvx	31,11,1
807	li	11,-4096+255
808	stw	12,332(1)
809	li	10,0x10
810	std	26,336(1)
811	li	26,0x20
812	std	27,344(1)
813	li	27,0x30
814	std	28,352(1)
815	li	28,0x40
816	std	29,360(1)
817	li	29,0x50
818	std	30,368(1)
819	li	30,0x60
820	std	31,376(1)
821	li	31,0x70
822	std	8,400(1)
823	or	11,11,11
824
825	bl	.LPICmeup
826	addi	11,1,79
827	li	7,8
828	lvsl	31,0,7
829	vspltisb	28,0x0f
830	vxor	31,31,28
831	.long	0x7C001E19
832	.long	0x7C8A1E19
833	vsldoi	1,0,0,4
834	vsldoi	2,0,0,8
835	vsldoi	3,0,0,12
836	vsldoi	5,4,4,4
837	vsldoi	6,4,4,8
838	vsldoi	7,4,4,12
839	li	0,3
840	b	.Loop
841.align	5
842.Loop:
843	lvx	28,0,6
844	.long	0x7D002699
845	addi	4,4,16
846	mr	7,6
847	stvx	0,0,11
848	stvx	1,10,11
849	stvx	2,26,11
850	stvx	3,27,11
851	stvx	4,28,11
852	stvx	5,29,11
853	stvx	6,30,11
854	stvx	7,31,11
855	vadduwm	7,7,28
856	lvx	28,10,6
857	vperm	8,8,8,31
858	vadduwm	7,7,8
859	vsel	29,6,5,4
860	vadduwm	6,6,28
861	vadduwm	7,7,29
862	.long	0x13C4FE82
863	vadduwm	7,7,30
864	vxor	29,0,1
865	vsel	29,1,2,29
866	vadduwm	3,3,7
867	.long	0x13C08682
868	vadduwm	30,30,29
869	vadduwm	7,7,30
870	lvx	28,26,7
871	vsldoi	9,8,8,4
872	vadduwm	6,6,9
873	vsel	29,5,4,3
874	vadduwm	5,5,28
875	vadduwm	6,6,29
876	.long	0x13C3FE82
877	vadduwm	6,6,30
878	vxor	29,7,0
879	vsel	29,0,1,29
880	vadduwm	2,2,6
881	.long	0x13C78682
882	vadduwm	30,30,29
883	vadduwm	6,6,30
884	lvx	28,27,7
885	vsldoi	10,9,9,4
886	vadduwm	5,5,10
887	vsel	29,4,3,2
888	vadduwm	4,4,28
889	vadduwm	5,5,29
890	.long	0x13C2FE82
891	vadduwm	5,5,30
892	vxor	29,6,7
893	vsel	29,7,0,29
894	vadduwm	1,1,5
895	.long	0x13C68682
896	vadduwm	30,30,29
897	vadduwm	5,5,30
898	lvx	28,28,7
899	.long	0x7D802699
900	addi	4,4,16
901	vsldoi	11,10,10,4
902	vadduwm	4,4,11
903	vsel	29,3,2,1
904	vadduwm	3,3,28
905	vadduwm	4,4,29
906	.long	0x13C1FE82
907	vadduwm	4,4,30
908	vxor	29,5,6
909	vsel	29,6,7,29
910	vadduwm	0,0,4
911	.long	0x13C58682
912	vadduwm	30,30,29
913	vadduwm	4,4,30
914	lvx	28,29,7
915	vperm	12,12,12,31
916	vadduwm	3,3,12
917	vsel	29,2,1,0
918	vadduwm	2,2,28
919	vadduwm	3,3,29
920	.long	0x13C0FE82
921	vadduwm	3,3,30
922	vxor	29,4,5
923	vsel	29,5,6,29
924	vadduwm	7,7,3
925	.long	0x13C48682
926	vadduwm	30,30,29
927	vadduwm	3,3,30
928	lvx	28,30,7
929	vsldoi	13,12,12,4
930	vadduwm	2,2,13
931	vsel	29,1,0,7
932	vadduwm	1,1,28
933	vadduwm	2,2,29
934	.long	0x13C7FE82
935	vadduwm	2,2,30
936	vxor	29,3,4
937	vsel	29,4,5,29
938	vadduwm	6,6,2
939	.long	0x13C38682
940	vadduwm	30,30,29
941	vadduwm	2,2,30
942	lvx	28,31,7
943	addi	7,7,0x80
944	vsldoi	14,13,13,4
945	vadduwm	1,1,14
946	vsel	29,0,7,6
947	vadduwm	0,0,28
948	vadduwm	1,1,29
949	.long	0x13C6FE82
950	vadduwm	1,1,30
951	vxor	29,2,3
952	vsel	29,3,4,29
953	vadduwm	5,5,1
954	.long	0x13C28682
955	vadduwm	30,30,29
956	vadduwm	1,1,30
957	lvx	28,0,7
958	.long	0x7E002699
959	addi	4,4,16
960	vsldoi	15,14,14,4
961	vadduwm	0,0,15
962	vsel	29,7,6,5
963	vadduwm	7,7,28
964	vadduwm	0,0,29
965	.long	0x13C5FE82
966	vadduwm	0,0,30
967	vxor	29,1,2
968	vsel	29,2,3,29
969	vadduwm	4,4,0
970	.long	0x13C18682
971	vadduwm	30,30,29
972	vadduwm	0,0,30
973	lvx	28,10,7
974	vperm	16,16,16,31
975	vadduwm	7,7,16
976	vsel	29,6,5,4
977	vadduwm	6,6,28
978	vadduwm	7,7,29
979	.long	0x13C4FE82
980	vadduwm	7,7,30
981	vxor	29,0,1
982	vsel	29,1,2,29
983	vadduwm	3,3,7
984	.long	0x13C08682
985	vadduwm	30,30,29
986	vadduwm	7,7,30
987	lvx	28,26,7
988	vsldoi	17,16,16,4
989	vadduwm	6,6,17
990	vsel	29,5,4,3
991	vadduwm	5,5,28
992	vadduwm	6,6,29
993	.long	0x13C3FE82
994	vadduwm	6,6,30
995	vxor	29,7,0
996	vsel	29,0,1,29
997	vadduwm	2,2,6
998	.long	0x13C78682
999	vadduwm	30,30,29
1000	vadduwm	6,6,30
1001	lvx	28,27,7
1002	vsldoi	18,17,17,4
1003	vadduwm	5,5,18
1004	vsel	29,4,3,2
1005	vadduwm	4,4,28
1006	vadduwm	5,5,29
1007	.long	0x13C2FE82
1008	vadduwm	5,5,30
1009	vxor	29,6,7
1010	vsel	29,7,0,29
1011	vadduwm	1,1,5
1012	.long	0x13C68682
1013	vadduwm	30,30,29
1014	vadduwm	5,5,30
1015	lvx	28,28,7
1016	.long	0x7F002699
1017	addi	4,4,16
1018	vsldoi	19,18,18,4
1019	vadduwm	4,4,19
1020	vsel	29,3,2,1
1021	vadduwm	3,3,28
1022	vadduwm	4,4,29
1023	.long	0x13C1FE82
1024	vadduwm	4,4,30
1025	vxor	29,5,6
1026	vsel	29,6,7,29
1027	vadduwm	0,0,4
1028	.long	0x13C58682
1029	vadduwm	30,30,29
1030	vadduwm	4,4,30
1031	lvx	28,29,7
1032	vperm	24,24,24,31
1033	vadduwm	3,3,24
1034	vsel	29,2,1,0
1035	vadduwm	2,2,28
1036	vadduwm	3,3,29
1037	.long	0x13C0FE82
1038	vadduwm	3,3,30
1039	vxor	29,4,5
1040	vsel	29,5,6,29
1041	vadduwm	7,7,3
1042	.long	0x13C48682
1043	vadduwm	30,30,29
1044	vadduwm	3,3,30
1045	lvx	28,30,7
1046	vsldoi	25,24,24,4
1047	vadduwm	2,2,25
1048	vsel	29,1,0,7
1049	vadduwm	1,1,28
1050	vadduwm	2,2,29
1051	.long	0x13C7FE82
1052	vadduwm	2,2,30
1053	vxor	29,3,4
1054	vsel	29,4,5,29
1055	vadduwm	6,6,2
1056	.long	0x13C38682
1057	vadduwm	30,30,29
1058	vadduwm	2,2,30
1059	lvx	28,31,7
1060	addi	7,7,0x80
1061	vsldoi	26,25,25,4
1062	vadduwm	1,1,26
1063	vsel	29,0,7,6
1064	vadduwm	0,0,28
1065	vadduwm	1,1,29
1066	.long	0x13C6FE82
1067	vadduwm	1,1,30
1068	vxor	29,2,3
1069	vsel	29,3,4,29
1070	vadduwm	5,5,1
1071	.long	0x13C28682
1072	vadduwm	30,30,29
1073	vadduwm	1,1,30
1074	lvx	28,0,7
1075	vsldoi	27,26,26,4
1076	.long	0x13C90682
1077	vadduwm	8,8,30
1078	.long	0x13DA7E82
1079	vadduwm	8,8,30
1080	vadduwm	8,8,17
1081	vadduwm	0,0,27
1082	vsel	29,7,6,5
1083	vadduwm	7,7,28
1084	vadduwm	0,0,29
1085	.long	0x13C5FE82
1086	vadduwm	0,0,30
1087	vxor	29,1,2
1088	vsel	29,2,3,29
1089	vadduwm	4,4,0
1090	.long	0x13C18682
1091	vadduwm	30,30,29
1092	vadduwm	0,0,30
1093	lvx	28,10,7
1094	mtctr	0
1095	b	.L16_xx
1096.align	5
1097.L16_xx:
1098	.long	0x13CA0682
1099	vadduwm	9,9,30
1100	.long	0x13DB7E82
1101	vadduwm	9,9,30
1102	vadduwm	9,9,18
1103	vadduwm	7,7,8
1104	vsel	29,6,5,4
1105	vadduwm	6,6,28
1106	vadduwm	7,7,29
1107	.long	0x13C4FE82
1108	vadduwm	7,7,30
1109	vxor	29,0,1
1110	vsel	29,1,2,29
1111	vadduwm	3,3,7
1112	.long	0x13C08682
1113	vadduwm	30,30,29
1114	vadduwm	7,7,30
1115	lvx	28,26,7
1116	.long	0x13CB0682
1117	vadduwm	10,10,30
1118	.long	0x13C87E82
1119	vadduwm	10,10,30
1120	vadduwm	10,10,19
1121	vadduwm	6,6,9
1122	vsel	29,5,4,3
1123	vadduwm	5,5,28
1124	vadduwm	6,6,29
1125	.long	0x13C3FE82
1126	vadduwm	6,6,30
1127	vxor	29,7,0
1128	vsel	29,0,1,29
1129	vadduwm	2,2,6
1130	.long	0x13C78682
1131	vadduwm	30,30,29
1132	vadduwm	6,6,30
1133	lvx	28,27,7
1134	.long	0x13CC0682
1135	vadduwm	11,11,30
1136	.long	0x13C97E82
1137	vadduwm	11,11,30
1138	vadduwm	11,11,24
1139	vadduwm	5,5,10
1140	vsel	29,4,3,2
1141	vadduwm	4,4,28
1142	vadduwm	5,5,29
1143	.long	0x13C2FE82
1144	vadduwm	5,5,30
1145	vxor	29,6,7
1146	vsel	29,7,0,29
1147	vadduwm	1,1,5
1148	.long	0x13C68682
1149	vadduwm	30,30,29
1150	vadduwm	5,5,30
1151	lvx	28,28,7
1152	.long	0x13CD0682
1153	vadduwm	12,12,30
1154	.long	0x13CA7E82
1155	vadduwm	12,12,30
1156	vadduwm	12,12,25
1157	vadduwm	4,4,11
1158	vsel	29,3,2,1
1159	vadduwm	3,3,28
1160	vadduwm	4,4,29
1161	.long	0x13C1FE82
1162	vadduwm	4,4,30
1163	vxor	29,5,6
1164	vsel	29,6,7,29
1165	vadduwm	0,0,4
1166	.long	0x13C58682
1167	vadduwm	30,30,29
1168	vadduwm	4,4,30
1169	lvx	28,29,7
1170	.long	0x13CE0682
1171	vadduwm	13,13,30
1172	.long	0x13CB7E82
1173	vadduwm	13,13,30
1174	vadduwm	13,13,26
1175	vadduwm	3,3,12
1176	vsel	29,2,1,0
1177	vadduwm	2,2,28
1178	vadduwm	3,3,29
1179	.long	0x13C0FE82
1180	vadduwm	3,3,30
1181	vxor	29,4,5
1182	vsel	29,5,6,29
1183	vadduwm	7,7,3
1184	.long	0x13C48682
1185	vadduwm	30,30,29
1186	vadduwm	3,3,30
1187	lvx	28,30,7
1188	.long	0x13CF0682
1189	vadduwm	14,14,30
1190	.long	0x13CC7E82
1191	vadduwm	14,14,30
1192	vadduwm	14,14,27
1193	vadduwm	2,2,13
1194	vsel	29,1,0,7
1195	vadduwm	1,1,28
1196	vadduwm	2,2,29
1197	.long	0x13C7FE82
1198	vadduwm	2,2,30
1199	vxor	29,3,4
1200	vsel	29,4,5,29
1201	vadduwm	6,6,2
1202	.long	0x13C38682
1203	vadduwm	30,30,29
1204	vadduwm	2,2,30
1205	lvx	28,31,7
1206	addi	7,7,0x80
1207	.long	0x13D00682
1208	vadduwm	15,15,30
1209	.long	0x13CD7E82
1210	vadduwm	15,15,30
1211	vadduwm	15,15,8
1212	vadduwm	1,1,14
1213	vsel	29,0,7,6
1214	vadduwm	0,0,28
1215	vadduwm	1,1,29
1216	.long	0x13C6FE82
1217	vadduwm	1,1,30
1218	vxor	29,2,3
1219	vsel	29,3,4,29
1220	vadduwm	5,5,1
1221	.long	0x13C28682
1222	vadduwm	30,30,29
1223	vadduwm	1,1,30
1224	lvx	28,0,7
1225	.long	0x13D10682
1226	vadduwm	16,16,30
1227	.long	0x13CE7E82
1228	vadduwm	16,16,30
1229	vadduwm	16,16,9
1230	vadduwm	0,0,15
1231	vsel	29,7,6,5
1232	vadduwm	7,7,28
1233	vadduwm	0,0,29
1234	.long	0x13C5FE82
1235	vadduwm	0,0,30
1236	vxor	29,1,2
1237	vsel	29,2,3,29
1238	vadduwm	4,4,0
1239	.long	0x13C18682
1240	vadduwm	30,30,29
1241	vadduwm	0,0,30
1242	lvx	28,10,7
1243	.long	0x13D20682
1244	vadduwm	17,17,30
1245	.long	0x13CF7E82
1246	vadduwm	17,17,30
1247	vadduwm	17,17,10
1248	vadduwm	7,7,16
1249	vsel	29,6,5,4
1250	vadduwm	6,6,28
1251	vadduwm	7,7,29
1252	.long	0x13C4FE82
1253	vadduwm	7,7,30
1254	vxor	29,0,1
1255	vsel	29,1,2,29
1256	vadduwm	3,3,7
1257	.long	0x13C08682
1258	vadduwm	30,30,29
1259	vadduwm	7,7,30
1260	lvx	28,26,7
1261	.long	0x13D30682
1262	vadduwm	18,18,30
1263	.long	0x13D07E82
1264	vadduwm	18,18,30
1265	vadduwm	18,18,11
1266	vadduwm	6,6,17
1267	vsel	29,5,4,3
1268	vadduwm	5,5,28
1269	vadduwm	6,6,29
1270	.long	0x13C3FE82
1271	vadduwm	6,6,30
1272	vxor	29,7,0
1273	vsel	29,0,1,29
1274	vadduwm	2,2,6
1275	.long	0x13C78682
1276	vadduwm	30,30,29
1277	vadduwm	6,6,30
1278	lvx	28,27,7
1279	.long	0x13D80682
1280	vadduwm	19,19,30
1281	.long	0x13D17E82
1282	vadduwm	19,19,30
1283	vadduwm	19,19,12
1284	vadduwm	5,5,18
1285	vsel	29,4,3,2
1286	vadduwm	4,4,28
1287	vadduwm	5,5,29
1288	.long	0x13C2FE82
1289	vadduwm	5,5,30
1290	vxor	29,6,7
1291	vsel	29,7,0,29
1292	vadduwm	1,1,5
1293	.long	0x13C68682
1294	vadduwm	30,30,29
1295	vadduwm	5,5,30
1296	lvx	28,28,7
1297	.long	0x13D90682
1298	vadduwm	24,24,30
1299	.long	0x13D27E82
1300	vadduwm	24,24,30
1301	vadduwm	24,24,13
1302	vadduwm	4,4,19
1303	vsel	29,3,2,1
1304	vadduwm	3,3,28
1305	vadduwm	4,4,29
1306	.long	0x13C1FE82
1307	vadduwm	4,4,30
1308	vxor	29,5,6
1309	vsel	29,6,7,29
1310	vadduwm	0,0,4
1311	.long	0x13C58682
1312	vadduwm	30,30,29
1313	vadduwm	4,4,30
1314	lvx	28,29,7
1315	.long	0x13DA0682
1316	vadduwm	25,25,30
1317	.long	0x13D37E82
1318	vadduwm	25,25,30
1319	vadduwm	25,25,14
1320	vadduwm	3,3,24
1321	vsel	29,2,1,0
1322	vadduwm	2,2,28
1323	vadduwm	3,3,29
1324	.long	0x13C0FE82
1325	vadduwm	3,3,30
1326	vxor	29,4,5
1327	vsel	29,5,6,29
1328	vadduwm	7,7,3
1329	.long	0x13C48682
1330	vadduwm	30,30,29
1331	vadduwm	3,3,30
1332	lvx	28,30,7
1333	.long	0x13DB0682
1334	vadduwm	26,26,30
1335	.long	0x13D87E82
1336	vadduwm	26,26,30
1337	vadduwm	26,26,15
1338	vadduwm	2,2,25
1339	vsel	29,1,0,7
1340	vadduwm	1,1,28
1341	vadduwm	2,2,29
1342	.long	0x13C7FE82
1343	vadduwm	2,2,30
1344	vxor	29,3,4
1345	vsel	29,4,5,29
1346	vadduwm	6,6,2
1347	.long	0x13C38682
1348	vadduwm	30,30,29
1349	vadduwm	2,2,30
1350	lvx	28,31,7
1351	addi	7,7,0x80
1352	.long	0x13C80682
1353	vadduwm	27,27,30
1354	.long	0x13D97E82
1355	vadduwm	27,27,30
1356	vadduwm	27,27,16
1357	vadduwm	1,1,26
1358	vsel	29,0,7,6
1359	vadduwm	0,0,28
1360	vadduwm	1,1,29
1361	.long	0x13C6FE82
1362	vadduwm	1,1,30
1363	vxor	29,2,3
1364	vsel	29,3,4,29
1365	vadduwm	5,5,1
1366	.long	0x13C28682
1367	vadduwm	30,30,29
1368	vadduwm	1,1,30
1369	lvx	28,0,7
1370	.long	0x13C90682
1371	vadduwm	8,8,30
1372	.long	0x13DA7E82
1373	vadduwm	8,8,30
1374	vadduwm	8,8,17
1375	vadduwm	0,0,27
1376	vsel	29,7,6,5
1377	vadduwm	7,7,28
1378	vadduwm	0,0,29
1379	.long	0x13C5FE82
1380	vadduwm	0,0,30
1381	vxor	29,1,2
1382	vsel	29,2,3,29
1383	vadduwm	4,4,0
1384	.long	0x13C18682
1385	vadduwm	30,30,29
1386	vadduwm	0,0,30
1387	lvx	28,10,7
1388	bdnz	.L16_xx
1389
1390	lvx	10,0,11
1391	subic.	5,5,1
1392	lvx	11,10,11
1393	vadduwm	0,0,10
1394	lvx	12,26,11
1395	vadduwm	1,1,11
1396	lvx	13,27,11
1397	vadduwm	2,2,12
1398	lvx	14,28,11
1399	vadduwm	3,3,13
1400	lvx	15,29,11
1401	vadduwm	4,4,14
1402	lvx	16,30,11
1403	vadduwm	5,5,15
1404	lvx	17,31,11
1405	vadduwm	6,6,16
1406	vadduwm	7,7,17
1407	bne	.Loop
1408	lvx	8,26,7
1409	vperm	0,0,1,28
1410	lvx	9,27,7
1411	vperm	4,4,5,28
1412	vperm	0,0,2,8
1413	vperm	4,4,6,8
1414	vperm	0,0,3,9
1415	vperm	4,4,7,9
1416	.long	0x7C001F19
1417	.long	0x7C8A1F19
1418	addi	11,1,207
1419	mtlr	8
1420	or	12,12,12
1421	lvx	24,0,11
1422	lvx	25,10,11
1423	lvx	26,26,11
1424	lvx	27,27,11
1425	lvx	28,28,11
1426	lvx	29,29,11
1427	lvx	30,30,11
1428	lvx	31,31,11
1429	ld	26,336(1)
1430	ld	27,344(1)
1431	ld	28,352(1)
1432	ld	29,360(1)
1433	ld	30,368(1)
1434	ld	31,376(1)
1435	addi	1,1,384
1436	blr
1437.long	0
1438.byte	0,12,4,1,0x80,6,3,0
1439.long	0
1440.size	zfs_sha256_power8,.-zfs_sha256_power8
1441.align	6
1442.LPICmeup:
1443	mflr	0
1444	bcl	20,31,$+4
1445	mflr	6
1446	addi	6,6,56
1447	mtlr	0
1448	blr
1449.long	0
1450.byte	0,12,0x14,0,0,0,0,0
1451.space	28
1452.long	0x428a2f98,0x428a2f98,0x428a2f98,0x428a2f98
1453.long	0x71374491,0x71374491,0x71374491,0x71374491
1454.long	0xb5c0fbcf,0xb5c0fbcf,0xb5c0fbcf,0xb5c0fbcf
1455.long	0xe9b5dba5,0xe9b5dba5,0xe9b5dba5,0xe9b5dba5
1456.long	0x3956c25b,0x3956c25b,0x3956c25b,0x3956c25b
1457.long	0x59f111f1,0x59f111f1,0x59f111f1,0x59f111f1
1458.long	0x923f82a4,0x923f82a4,0x923f82a4,0x923f82a4
1459.long	0xab1c5ed5,0xab1c5ed5,0xab1c5ed5,0xab1c5ed5
1460.long	0xd807aa98,0xd807aa98,0xd807aa98,0xd807aa98
1461.long	0x12835b01,0x12835b01,0x12835b01,0x12835b01
1462.long	0x243185be,0x243185be,0x243185be,0x243185be
1463.long	0x550c7dc3,0x550c7dc3,0x550c7dc3,0x550c7dc3
1464.long	0x72be5d74,0x72be5d74,0x72be5d74,0x72be5d74
1465.long	0x80deb1fe,0x80deb1fe,0x80deb1fe,0x80deb1fe
1466.long	0x9bdc06a7,0x9bdc06a7,0x9bdc06a7,0x9bdc06a7
1467.long	0xc19bf174,0xc19bf174,0xc19bf174,0xc19bf174
1468.long	0xe49b69c1,0xe49b69c1,0xe49b69c1,0xe49b69c1
1469.long	0xefbe4786,0xefbe4786,0xefbe4786,0xefbe4786
1470.long	0x0fc19dc6,0x0fc19dc6,0x0fc19dc6,0x0fc19dc6
1471.long	0x240ca1cc,0x240ca1cc,0x240ca1cc,0x240ca1cc
1472.long	0x2de92c6f,0x2de92c6f,0x2de92c6f,0x2de92c6f
1473.long	0x4a7484aa,0x4a7484aa,0x4a7484aa,0x4a7484aa
1474.long	0x5cb0a9dc,0x5cb0a9dc,0x5cb0a9dc,0x5cb0a9dc
1475.long	0x76f988da,0x76f988da,0x76f988da,0x76f988da
1476.long	0x983e5152,0x983e5152,0x983e5152,0x983e5152
1477.long	0xa831c66d,0xa831c66d,0xa831c66d,0xa831c66d
1478.long	0xb00327c8,0xb00327c8,0xb00327c8,0xb00327c8
1479.long	0xbf597fc7,0xbf597fc7,0xbf597fc7,0xbf597fc7
1480.long	0xc6e00bf3,0xc6e00bf3,0xc6e00bf3,0xc6e00bf3
1481.long	0xd5a79147,0xd5a79147,0xd5a79147,0xd5a79147
1482.long	0x06ca6351,0x06ca6351,0x06ca6351,0x06ca6351
1483.long	0x14292967,0x14292967,0x14292967,0x14292967
1484.long	0x27b70a85,0x27b70a85,0x27b70a85,0x27b70a85
1485.long	0x2e1b2138,0x2e1b2138,0x2e1b2138,0x2e1b2138
1486.long	0x4d2c6dfc,0x4d2c6dfc,0x4d2c6dfc,0x4d2c6dfc
1487.long	0x53380d13,0x53380d13,0x53380d13,0x53380d13
1488.long	0x650a7354,0x650a7354,0x650a7354,0x650a7354
1489.long	0x766a0abb,0x766a0abb,0x766a0abb,0x766a0abb
1490.long	0x81c2c92e,0x81c2c92e,0x81c2c92e,0x81c2c92e
1491.long	0x92722c85,0x92722c85,0x92722c85,0x92722c85
1492.long	0xa2bfe8a1,0xa2bfe8a1,0xa2bfe8a1,0xa2bfe8a1
1493.long	0xa81a664b,0xa81a664b,0xa81a664b,0xa81a664b
1494.long	0xc24b8b70,0xc24b8b70,0xc24b8b70,0xc24b8b70
1495.long	0xc76c51a3,0xc76c51a3,0xc76c51a3,0xc76c51a3
1496.long	0xd192e819,0xd192e819,0xd192e819,0xd192e819
1497.long	0xd6990624,0xd6990624,0xd6990624,0xd6990624
1498.long	0xf40e3585,0xf40e3585,0xf40e3585,0xf40e3585
1499.long	0x106aa070,0x106aa070,0x106aa070,0x106aa070
1500.long	0x19a4c116,0x19a4c116,0x19a4c116,0x19a4c116
1501.long	0x1e376c08,0x1e376c08,0x1e376c08,0x1e376c08
1502.long	0x2748774c,0x2748774c,0x2748774c,0x2748774c
1503.long	0x34b0bcb5,0x34b0bcb5,0x34b0bcb5,0x34b0bcb5
1504.long	0x391c0cb3,0x391c0cb3,0x391c0cb3,0x391c0cb3
1505.long	0x4ed8aa4a,0x4ed8aa4a,0x4ed8aa4a,0x4ed8aa4a
1506.long	0x5b9cca4f,0x5b9cca4f,0x5b9cca4f,0x5b9cca4f
1507.long	0x682e6ff3,0x682e6ff3,0x682e6ff3,0x682e6ff3
1508.long	0x748f82ee,0x748f82ee,0x748f82ee,0x748f82ee
1509.long	0x78a5636f,0x78a5636f,0x78a5636f,0x78a5636f
1510.long	0x84c87814,0x84c87814,0x84c87814,0x84c87814
1511.long	0x8cc70208,0x8cc70208,0x8cc70208,0x8cc70208
1512.long	0x90befffa,0x90befffa,0x90befffa,0x90befffa
1513.long	0xa4506ceb,0xa4506ceb,0xa4506ceb,0xa4506ceb
1514.long	0xbef9a3f7,0xbef9a3f7,0xbef9a3f7,0xbef9a3f7
1515.long	0xc67178f2,0xc67178f2,0xc67178f2,0xc67178f2
1516.long	0,0,0,0
1517.long	0x10111213,0x10111213,0x10111213,0x00010203
1518.long	0x10111213,0x10111213,0x04050607,0x00010203
1519.long	0x10111213,0x08090a0b,0x04050607,0x00010203
1520#endif
1521