xref: /freebsd/sys/crypto/openssl/powerpc64/keccak1600-ppc64.S (revision 4757b351ea9d59d71d4a38b82506d2d16fcd560d)
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.type	dword_le_load,@function
302.align	5
303dword_le_load:
304.localentry	dword_le_load,0
305
306	lbz	0,1(3)
307	lbz	4,2(3)
308	lbz	5,3(3)
309	insrdi	0,4,8,48
310	lbz	4,4(3)
311	insrdi	0,5,8,40
312	lbz	5,5(3)
313	insrdi	0,4,8,32
314	lbz	4,6(3)
315	insrdi	0,5,8,24
316	lbz	5,7(3)
317	insrdi	0,4,8,16
318	lbzu	4,8(3)
319	insrdi	0,5,8,8
320	insrdi	0,4,8,0
321	blr
322.long	0
323.byte	0,12,0x14,0,0,0,1,0
324.long	0
325.size	dword_le_load,.-dword_le_load
326.globl	SHA3_absorb
327.type	SHA3_absorb,@function
328.type	SHA3_absorb,@function
329.align	5
330SHA3_absorb:
331.localentry	SHA3_absorb,0
332
333	stdu	1,-272(1)
334	mflr	0
335	std	14,128(1)
336	std	15,136(1)
337	std	16,144(1)
338	std	17,152(1)
339	std	18,160(1)
340	std	19,168(1)
341	std	20,176(1)
342	std	21,184(1)
343	std	22,192(1)
344	std	23,200(1)
345	std	24,208(1)
346	std	25,216(1)
347	std	26,224(1)
348	std	27,232(1)
349	std	28,240(1)
350	std	29,248(1)
351	std	30,256(1)
352	std	31,264(1)
353	std	0,288(1)
354
355	bl	PICmeup
356	subi	4,4,1
357	subi	12,12,8
358
359	std	3,48(1)
360	std	4,56(1)
361	std	5,64(1)
362	std	6,72(1)
363	mr	0,6
364	std	12,80(1)
365
366	ld	7,0(3)
367	ld	8,8(3)
368	ld	9,16(3)
369	ld	10,24(3)
370	ld	11,32(3)
371	ld	12,40(3)
372	ld	6,48(3)
373	ld	14,56(3)
374	ld	15,64(3)
375	ld	16,72(3)
376	ld	17,80(3)
377	ld	18,88(3)
378	ld	19,96(3)
379	ld	20,104(3)
380	ld	21,112(3)
381	ld	22,120(3)
382	ld	23,128(3)
383	ld	24,136(3)
384	ld	25,144(3)
385	ld	26,152(3)
386	ld	27,160(3)
387	ld	28,168(3)
388	ld	29,176(3)
389	ld	30,184(3)
390	ld	31,192(3)
391
392	mr	3,4
393	mr	4,5
394	mr	5,0
395
396	b	.Loop_absorb
397
398.align	4
399.Loop_absorb:
400	cmpld	4,5
401	blt	.Labsorbed
402
403	sub	4,4,5
404	srwi	5,5,3
405	std	4,64(1)
406	mtctr	5
407	bl	dword_le_load
408	xor	7,7,0
409	bdz	.Lprocess_block
410	bl	dword_le_load
411	xor	8,8,0
412	bdz	.Lprocess_block
413	bl	dword_le_load
414	xor	9,9,0
415	bdz	.Lprocess_block
416	bl	dword_le_load
417	xor	10,10,0
418	bdz	.Lprocess_block
419	bl	dword_le_load
420	xor	11,11,0
421	bdz	.Lprocess_block
422	bl	dword_le_load
423	xor	12,12,0
424	bdz	.Lprocess_block
425	bl	dword_le_load
426	xor	6,6,0
427	bdz	.Lprocess_block
428	bl	dword_le_load
429	xor	14,14,0
430	bdz	.Lprocess_block
431	bl	dword_le_load
432	xor	15,15,0
433	bdz	.Lprocess_block
434	bl	dword_le_load
435	xor	16,16,0
436	bdz	.Lprocess_block
437	bl	dword_le_load
438	xor	17,17,0
439	bdz	.Lprocess_block
440	bl	dword_le_load
441	xor	18,18,0
442	bdz	.Lprocess_block
443	bl	dword_le_load
444	xor	19,19,0
445	bdz	.Lprocess_block
446	bl	dword_le_load
447	xor	20,20,0
448	bdz	.Lprocess_block
449	bl	dword_le_load
450	xor	21,21,0
451	bdz	.Lprocess_block
452	bl	dword_le_load
453	xor	22,22,0
454	bdz	.Lprocess_block
455	bl	dword_le_load
456	xor	23,23,0
457	bdz	.Lprocess_block
458	bl	dword_le_load
459	xor	24,24,0
460	bdz	.Lprocess_block
461	bl	dword_le_load
462	xor	25,25,0
463	bdz	.Lprocess_block
464	bl	dword_le_load
465	xor	26,26,0
466	bdz	.Lprocess_block
467	bl	dword_le_load
468	xor	27,27,0
469	bdz	.Lprocess_block
470	bl	dword_le_load
471	xor	28,28,0
472	bdz	.Lprocess_block
473	bl	dword_le_load
474	xor	29,29,0
475	bdz	.Lprocess_block
476	bl	dword_le_load
477	xor	30,30,0
478	bdz	.Lprocess_block
479	bl	dword_le_load
480	xor	31,31,0
481
482.Lprocess_block:
483	std	3,56(1)
484
485	bl	KeccakF1600_int
486
487	ld	0,80(1)
488	ld	5,72(1)
489	ld	4,64(1)
490	ld	3,56(1)
491	addic	0,0,-192
492	std	0,80(1)
493
494	b	.Loop_absorb
495
496.align	4
497.Labsorbed:
498	ld	3,48(1)
499	std	7,0(3)
500	std	8,8(3)
501	std	9,16(3)
502	std	10,24(3)
503	std	11,32(3)
504	std	12,40(3)
505	std	6,48(3)
506	std	14,56(3)
507	std	15,64(3)
508	std	16,72(3)
509	std	17,80(3)
510	std	18,88(3)
511	std	19,96(3)
512	std	20,104(3)
513	std	21,112(3)
514	std	22,120(3)
515	std	23,128(3)
516	std	24,136(3)
517	std	25,144(3)
518	std	26,152(3)
519	std	27,160(3)
520	std	28,168(3)
521	std	29,176(3)
522	std	30,184(3)
523	std	31,192(3)
524
525	mr	3,4
526	ld	0,288(1)
527	ld	14,128(1)
528	ld	15,136(1)
529	ld	16,144(1)
530	ld	17,152(1)
531	ld	18,160(1)
532	ld	19,168(1)
533	ld	20,176(1)
534	ld	21,184(1)
535	ld	22,192(1)
536	ld	23,200(1)
537	ld	24,208(1)
538	ld	25,216(1)
539	ld	26,224(1)
540	ld	27,232(1)
541	ld	28,240(1)
542	ld	29,248(1)
543	ld	30,256(1)
544	ld	31,264(1)
545	mtlr	0
546	addi	1,1,272
547	blr
548.long	0
549.byte	0,12,4,1,0x80,18,4,0
550.long	0
551.size	SHA3_absorb,.-SHA3_absorb
552.globl	SHA3_squeeze
553.type	SHA3_squeeze,@function
554.type	SHA3_squeeze,@function
555.align	5
556SHA3_squeeze:
557.localentry	SHA3_squeeze,0
558
559	stdu	1,-80(1)
560	mflr	0
561	std	28,48(1)
562	std	29,56(1)
563	std	30,64(1)
564	std	31,72(1)
565	std	0,96(1)
566
567	mr	28,3
568	subi	3,3,8
569	subi	29,4,1
570	mr	30,5
571	mr	31,6
572	cmplwi	7,0
573	bne	.Lnext_block
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	stb	0,1(29)
583	srdi	0,0,8
584	stb	0,2(29)
585	srdi	0,0,8
586	stb	0,3(29)
587	srdi	0,0,8
588	stb	0,4(29)
589	srdi	0,0,8
590	stb	0,5(29)
591	srdi	0,0,8
592	stb	0,6(29)
593	srdi	0,0,8
594	stb	0,7(29)
595	srdi	0,0,8
596	stbu	0,8(29)
597
598	subic.	30,30,8
599	beq	.Lsqueeze_done
600
601	subic.	6,6,8
602	bgt	.Loop_squeeze
603
604.Lnext_block:
605	mr	3,28
606	bl	KeccakF1600
607	subi	3,28,8
608	mr	6,31
609	b	.Loop_squeeze
610
611.align	4
612.Lsqueeze_tail:
613	mtctr	30
614.Loop_tail:
615	stbu	0,1(29)
616	srdi	0,0,8
617	bdnz	.Loop_tail
618
619.Lsqueeze_done:
620	ld	0,96(1)
621	ld	28,48(1)
622	ld	29,56(1)
623	ld	30,64(1)
624	ld	31,72(1)
625	mtlr	0
626	addi	1,1,80
627	blr
628.long	0
629.byte	0,12,4,1,0x80,4,4,0
630.long	0
631.size	SHA3_squeeze,.-SHA3_squeeze
632.align	6
633PICmeup:
634	mflr	0
635	bcl	20,31,$+4
636	mflr	12
637	addi	12,12,56
638	mtlr	0
639	blr
640.long	0
641.byte	0,12,0x14,0,0,0,0,0
642.space	28
643.type	iotas,@object
644iotas:
645.long	0x00000000,0x00000001
646.long	0x00000000,0x00008082
647.long	0x80000000,0x0000808a
648.long	0x80000000,0x80008000
649.long	0x00000000,0x0000808b
650.long	0x00000000,0x80000001
651.long	0x80000000,0x80008081
652.long	0x80000000,0x00008009
653.long	0x00000000,0x0000008a
654.long	0x00000000,0x00000088
655.long	0x00000000,0x80008009
656.long	0x00000000,0x8000000a
657.long	0x00000000,0x8000808b
658.long	0x80000000,0x0000008b
659.long	0x80000000,0x00008089
660.long	0x80000000,0x00008003
661.long	0x80000000,0x00008002
662.long	0x80000000,0x00000080
663.long	0x00000000,0x0000800a
664.long	0x80000000,0x8000000a
665.long	0x80000000,0x80008081
666.long	0x80000000,0x00008080
667.long	0x00000000,0x80000001
668.long	0x80000000,0x80008008
669.size	iotas,.-iotas
670.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
671.align	2
672