1/* Do not modify. This file is auto-generated from keccak1600-ppc64.pl. */
2.abiversion	2
3.text
4
5.type	KeccakF1600_int,@function
6.align	5
7KeccakF1600_int:
8.localentry	KeccakF1600_int,0
9
10	li	0,24
11	mtctr	0
12	b	.Loop
13.align	4
14.Loop:
15	xor	0,7,12
16	std	11,96(1)
17	xor	3,8,6
18	std	16,104(1)
19	xor	4,9,14
20	std	21,112(1)
21	xor	5,10,15
22	std	26,120(1)
23	xor	11,11,16
24	xor	0,0,17
25	xor	3,3,18
26	xor	4,4,19
27	xor	5,5,20
28	xor	11,11,21
29	xor	0,0,22
30	xor	3,3,23
31	xor	4,4,24
32	xor	5,5,25
33	xor	11,11,26
34	xor	0,0,27
35	xor	4,4,29
36	xor	3,3,28
37	xor	5,5,30
38	rotldi	16,4,1
39	xor	11,11,31
40	rotldi	21,5,1
41	xor	16,16,0
42	rotldi	26,11,1
43
44	xor	8,8,16
45	xor	6,6,16
46	xor	18,18,16
47	xor	23,23,16
48	xor	28,28,16
49
50	rotldi	16,0,1
51	xor	21,21,3
52	xor	4,4,26
53	rotldi	26,3,1
54	xor	5,5,16
55	xor	11,11,26
56
57	xor	3,   9,21
58	xor	14,14,21
59	xor	19,19,21
60	xor	24,24,21
61	xor	29,29,21
62
63	xor	7,7,11
64	xor	12,12,11
65	xor	17,17,11
66	xor	22,22,11
67	xor	27,27,11
68	ld	11,96(1)
69	xor	0,   10,4
70	ld	16,104(1)
71	xor	15,15,4
72	ld	21,112(1)
73	xor	20,20,4
74	ld	26,120(1)
75	xor	25,25,4
76	xor	30,30,4
77
78	xor	4,   11,5
79	xor	16,16,5
80	xor	21,21,5
81	xor	26,26,5
82	xor	31,31,5
83
84	mr	5,8
85	rotldi	8,6,44
86
87	rotldi	9,19,43
88
89	rotldi	10,25,21
90
91	rotldi	11,31,14
92
93	rotldi	6,16,20
94	rotldi	19,20,25
95	rotldi	25,24,15
96	rotldi	31,28,2
97
98	rotldi	16,29,61
99	rotldi	20,26,8
100	rotldi	24,18,10
101	rotldi	28,15,55
102
103	rotldi	29,21,39
104	rotldi	26,30,56
105	rotldi	18,14,6
106	rotldi	15,23,45
107
108	rotldi	21,27,18
109	rotldi	30,22,41
110	rotldi	14,17,3
111	rotldi	23,12,36
112
113	rotldi	12,0,28
114	rotldi	17,5,1
115	rotldi	22,4,27
116	rotldi	27,3,62
117
118	andc	0,9,8
119	andc	3,10,9
120	andc	4,7,11
121	andc	5,8,7
122	xor	7,7,0
123	andc	0,11,10
124	xor	8,8,3
125	ld	3,80(1)
126	xor	10,10,4
127	xor	11,11,5
128	xor	9,9,0
129	ldu	5,8(3)
130
131	andc	0,14,6
132	std	3,80(1)
133	andc	3,15,14
134	andc	4,12,16
135	xor	7,7,5
136	andc	5,6,12
137	xor	12,12,0
138	andc	0,16,15
139	xor	6,6,3
140	xor	15,15,4
141	xor	16,16,5
142	xor	14,14,0
143
144	andc	0,19,18
145	andc	3,20,19
146	andc	4,17,21
147	andc	5,18,17
148	xor	17,17,0
149	andc	0,21,20
150	xor	18,18,3
151	xor	20,20,4
152	xor	21,21,5
153	xor	19,19,0
154
155	andc	0,24,23
156	andc	3,25,24
157	andc	4,22,26
158	andc	5,23,22
159	xor	22,22,0
160	andc	0,26,25
161	xor	23,23,3
162	xor	25,25,4
163	xor	26,26,5
164	xor	24,24,0
165
166	andc	0,29,28
167	andc	3,30,29
168	andc	4,27,31
169	andc	5,28,27
170	xor	27,27,0
171	andc	0,31,30
172	xor	28,28,3
173	xor	30,30,4
174	xor	31,31,5
175	xor	29,29,0
176
177	bdnz	.Loop
178
179	blr
180.long	0
181.byte	0,12,0x14,0,0,0,0,0
182.size	KeccakF1600_int,.-KeccakF1600_int
183
184.type	KeccakF1600,@function
185.align	5
186KeccakF1600:
187.localentry	KeccakF1600,0
188
189	stdu	1,-272(1)
190	mflr	0
191	std	14,128(1)
192	std	15,136(1)
193	std	16,144(1)
194	std	17,152(1)
195	std	18,160(1)
196	std	19,168(1)
197	std	20,176(1)
198	std	21,184(1)
199	std	22,192(1)
200	std	23,200(1)
201	std	24,208(1)
202	std	25,216(1)
203	std	26,224(1)
204	std	27,232(1)
205	std	28,240(1)
206	std	29,248(1)
207	std	30,256(1)
208	std	31,264(1)
209	std	0,288(1)
210
211	bl	PICmeup
212	subi	12,12,8
213
214	std	3,48(1)
215
216
217
218	std	12,80(1)
219
220	ld	7,0(3)
221	ld	8,8(3)
222	ld	9,16(3)
223	ld	10,24(3)
224	ld	11,32(3)
225	ld	12,40(3)
226	ld	6,48(3)
227	ld	14,56(3)
228	ld	15,64(3)
229	ld	16,72(3)
230	ld	17,80(3)
231	ld	18,88(3)
232	ld	19,96(3)
233	ld	20,104(3)
234	ld	21,112(3)
235	ld	22,120(3)
236	ld	23,128(3)
237	ld	24,136(3)
238	ld	25,144(3)
239	ld	26,152(3)
240	ld	27,160(3)
241	ld	28,168(3)
242	ld	29,176(3)
243	ld	30,184(3)
244	ld	31,192(3)
245
246	bl	KeccakF1600_int
247
248	ld	3,48(1)
249	std	7,0(3)
250	std	8,8(3)
251	std	9,16(3)
252	std	10,24(3)
253	std	11,32(3)
254	std	12,40(3)
255	std	6,48(3)
256	std	14,56(3)
257	std	15,64(3)
258	std	16,72(3)
259	std	17,80(3)
260	std	18,88(3)
261	std	19,96(3)
262	std	20,104(3)
263	std	21,112(3)
264	std	22,120(3)
265	std	23,128(3)
266	std	24,136(3)
267	std	25,144(3)
268	std	26,152(3)
269	std	27,160(3)
270	std	28,168(3)
271	std	29,176(3)
272	std	30,184(3)
273	std	31,192(3)
274
275	ld	0,288(1)
276	ld	14,128(1)
277	ld	15,136(1)
278	ld	16,144(1)
279	ld	17,152(1)
280	ld	18,160(1)
281	ld	19,168(1)
282	ld	20,176(1)
283	ld	21,184(1)
284	ld	22,192(1)
285	ld	23,200(1)
286	ld	24,208(1)
287	ld	25,216(1)
288	ld	26,224(1)
289	ld	27,232(1)
290	ld	28,240(1)
291	ld	29,248(1)
292	ld	30,256(1)
293	ld	31,264(1)
294	mtlr	0
295	addi	1,1,272
296	blr
297.long	0
298.byte	0,12,4,1,0x80,18,1,0
299.long	0
300.size	KeccakF1600,.-KeccakF1600
301
302.type	dword_le_load,@function
303.align	5
304dword_le_load:
305.localentry	dword_le_load,0
306
307	lbzu	0,1(3)
308	lbzu	4,1(3)
309	lbzu	5,1(3)
310	insrdi	0,4,8,48
311	lbzu	4,1(3)
312	insrdi	0,5,8,40
313	lbzu	5,1(3)
314	insrdi	0,4,8,32
315	lbzu	4,1(3)
316	insrdi	0,5,8,24
317	lbzu	5,1(3)
318	insrdi	0,4,8,16
319	lbzu	4,1(3)
320	insrdi	0,5,8,8
321	insrdi	0,4,8,0
322	blr
323.long	0
324.byte	0,12,0x14,0,0,0,1,0
325.long	0
326.size	dword_le_load,.-dword_le_load
327
328.globl	SHA3_absorb
329.type	SHA3_absorb,@function
330.type	SHA3_absorb,@function
331.align	5
332SHA3_absorb:
333.localentry	SHA3_absorb,0
334
335	stdu	1,-272(1)
336	mflr	0
337	std	14,128(1)
338	std	15,136(1)
339	std	16,144(1)
340	std	17,152(1)
341	std	18,160(1)
342	std	19,168(1)
343	std	20,176(1)
344	std	21,184(1)
345	std	22,192(1)
346	std	23,200(1)
347	std	24,208(1)
348	std	25,216(1)
349	std	26,224(1)
350	std	27,232(1)
351	std	28,240(1)
352	std	29,248(1)
353	std	30,256(1)
354	std	31,264(1)
355	std	0,288(1)
356
357	bl	PICmeup
358	subi	4,4,1
359	subi	12,12,8
360
361	std	3,48(1)
362	std	4,56(1)
363	std	5,64(1)
364	std	6,72(1)
365	mr	0,6
366	std	12,80(1)
367
368	ld	7,0(3)
369	ld	8,8(3)
370	ld	9,16(3)
371	ld	10,24(3)
372	ld	11,32(3)
373	ld	12,40(3)
374	ld	6,48(3)
375	ld	14,56(3)
376	ld	15,64(3)
377	ld	16,72(3)
378	ld	17,80(3)
379	ld	18,88(3)
380	ld	19,96(3)
381	ld	20,104(3)
382	ld	21,112(3)
383	ld	22,120(3)
384	ld	23,128(3)
385	ld	24,136(3)
386	ld	25,144(3)
387	ld	26,152(3)
388	ld	27,160(3)
389	ld	28,168(3)
390	ld	29,176(3)
391	ld	30,184(3)
392	ld	31,192(3)
393
394	mr	3,4
395	mr	4,5
396	mr	5,0
397
398	b	.Loop_absorb
399
400.align	4
401.Loop_absorb:
402	cmpld	4,5
403	blt	.Labsorbed
404
405	sub	4,4,5
406	srwi	5,5,3
407	std	4,64(1)
408	mtctr	5
409	bl	dword_le_load
410	xor	7,7,0
411	bdz	.Lprocess_block
412	bl	dword_le_load
413	xor	8,8,0
414	bdz	.Lprocess_block
415	bl	dword_le_load
416	xor	9,9,0
417	bdz	.Lprocess_block
418	bl	dword_le_load
419	xor	10,10,0
420	bdz	.Lprocess_block
421	bl	dword_le_load
422	xor	11,11,0
423	bdz	.Lprocess_block
424	bl	dword_le_load
425	xor	12,12,0
426	bdz	.Lprocess_block
427	bl	dword_le_load
428	xor	6,6,0
429	bdz	.Lprocess_block
430	bl	dword_le_load
431	xor	14,14,0
432	bdz	.Lprocess_block
433	bl	dword_le_load
434	xor	15,15,0
435	bdz	.Lprocess_block
436	bl	dword_le_load
437	xor	16,16,0
438	bdz	.Lprocess_block
439	bl	dword_le_load
440	xor	17,17,0
441	bdz	.Lprocess_block
442	bl	dword_le_load
443	xor	18,18,0
444	bdz	.Lprocess_block
445	bl	dword_le_load
446	xor	19,19,0
447	bdz	.Lprocess_block
448	bl	dword_le_load
449	xor	20,20,0
450	bdz	.Lprocess_block
451	bl	dword_le_load
452	xor	21,21,0
453	bdz	.Lprocess_block
454	bl	dword_le_load
455	xor	22,22,0
456	bdz	.Lprocess_block
457	bl	dword_le_load
458	xor	23,23,0
459	bdz	.Lprocess_block
460	bl	dword_le_load
461	xor	24,24,0
462	bdz	.Lprocess_block
463	bl	dword_le_load
464	xor	25,25,0
465	bdz	.Lprocess_block
466	bl	dword_le_load
467	xor	26,26,0
468	bdz	.Lprocess_block
469	bl	dword_le_load
470	xor	27,27,0
471	bdz	.Lprocess_block
472	bl	dword_le_load
473	xor	28,28,0
474	bdz	.Lprocess_block
475	bl	dword_le_load
476	xor	29,29,0
477	bdz	.Lprocess_block
478	bl	dword_le_load
479	xor	30,30,0
480	bdz	.Lprocess_block
481	bl	dword_le_load
482	xor	31,31,0
483
484.Lprocess_block:
485	std	3,56(1)
486
487	bl	KeccakF1600_int
488
489	ld	0,80(1)
490	ld	5,72(1)
491	ld	4,64(1)
492	ld	3,56(1)
493	addic	0,0,-192
494	std	0,80(1)
495
496	b	.Loop_absorb
497
498.align	4
499.Labsorbed:
500	ld	3,48(1)
501	std	7,0(3)
502	std	8,8(3)
503	std	9,16(3)
504	std	10,24(3)
505	std	11,32(3)
506	std	12,40(3)
507	std	6,48(3)
508	std	14,56(3)
509	std	15,64(3)
510	std	16,72(3)
511	std	17,80(3)
512	std	18,88(3)
513	std	19,96(3)
514	std	20,104(3)
515	std	21,112(3)
516	std	22,120(3)
517	std	23,128(3)
518	std	24,136(3)
519	std	25,144(3)
520	std	26,152(3)
521	std	27,160(3)
522	std	28,168(3)
523	std	29,176(3)
524	std	30,184(3)
525	std	31,192(3)
526
527	mr	3,4
528	ld	0,288(1)
529	ld	14,128(1)
530	ld	15,136(1)
531	ld	16,144(1)
532	ld	17,152(1)
533	ld	18,160(1)
534	ld	19,168(1)
535	ld	20,176(1)
536	ld	21,184(1)
537	ld	22,192(1)
538	ld	23,200(1)
539	ld	24,208(1)
540	ld	25,216(1)
541	ld	26,224(1)
542	ld	27,232(1)
543	ld	28,240(1)
544	ld	29,248(1)
545	ld	30,256(1)
546	ld	31,264(1)
547	mtlr	0
548	addi	1,1,272
549	blr
550.long	0
551.byte	0,12,4,1,0x80,18,4,0
552.long	0
553.size	SHA3_absorb,.-SHA3_absorb
554.globl	SHA3_squeeze
555.type	SHA3_squeeze,@function
556.type	SHA3_squeeze,@function
557.align	5
558SHA3_squeeze:
559.localentry	SHA3_squeeze,0
560
561	stdu	1,-80(1)
562	mflr	0
563	std	28,48(1)
564	std	29,56(1)
565	std	30,64(1)
566	std	31,72(1)
567	std	0,96(1)
568
569	mr	28,3
570	subi	3,3,8
571	subi	29,4,1
572	mr	30,5
573	mr	31,6
574	b	.Loop_squeeze
575
576.align	4
577.Loop_squeeze:
578	ldu	0,8(3)
579	cmpldi	30,8
580	blt	.Lsqueeze_tail
581
582	stbu	0,1(29)
583	srdi	0,0,8
584	stbu	0,1(29)
585	srdi	0,0,8
586	stbu	0,1(29)
587	srdi	0,0,8
588	stbu	0,1(29)
589	srdi	0,0,8
590	stbu	0,1(29)
591	srdi	0,0,8
592	stbu	0,1(29)
593	srdi	0,0,8
594	stbu	0,1(29)
595	srdi	0,0,8
596	stbu	0,1(29)
597
598	subic.	30,30,8
599	beq	.Lsqueeze_done
600
601	subic.	6,6,8
602	bgt	.Loop_squeeze
603
604	mr	3,28
605	bl	KeccakF1600
606	subi	3,28,8
607	mr	6,31
608	b	.Loop_squeeze
609
610.align	4
611.Lsqueeze_tail:
612	mtctr	30
613.Loop_tail:
614	stbu	0,1(29)
615	srdi	0,0,8
616	bdnz	.Loop_tail
617
618.Lsqueeze_done:
619	ld	0,96(1)
620	ld	28,48(1)
621	ld	29,56(1)
622	ld	30,64(1)
623	ld	31,72(1)
624	mtlr	0
625	addi	1,1,80
626	blr
627.long	0
628.byte	0,12,4,1,0x80,4,4,0
629.long	0
630.size	SHA3_squeeze,.-SHA3_squeeze
631.align	6
632PICmeup:
633	mflr	0
634	bcl	20,31,$+4
635	mflr	12
636	addi	12,12,56
637	mtlr	0
638	blr
639.long	0
640.byte	0,12,0x14,0,0,0,0,0
641.space	28
642.type	iotas,@object
643iotas:
644.long	0x00000000,0x00000001
645.long	0x00000000,0x00008082
646.long	0x80000000,0x0000808a
647.long	0x80000000,0x80008000
648.long	0x00000000,0x0000808b
649.long	0x00000000,0x80000001
650.long	0x80000000,0x80008081
651.long	0x80000000,0x00008009
652.long	0x00000000,0x0000008a
653.long	0x00000000,0x00000088
654.long	0x00000000,0x80008009
655.long	0x00000000,0x8000000a
656.long	0x00000000,0x8000808b
657.long	0x80000000,0x0000008b
658.long	0x80000000,0x00008089
659.long	0x80000000,0x00008003
660.long	0x80000000,0x00008002
661.long	0x80000000,0x00000080
662.long	0x00000000,0x0000800a
663.long	0x80000000,0x8000000a
664.long	0x80000000,0x80008081
665.long	0x80000000,0x00008080
666.long	0x00000000,0x80000001
667.long	0x80000000,0x80008008
668.size	iotas,.-iotas
669.byte	75,101,99,99,97,107,45,49,54,48,48,32,97,98,115,111,114,98,32,97,110,100,32,115,113,117,101,101,122,101,32,102,111,114,32,80,80,67,54,52,44,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
670.align	2
671