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