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