xref: /netbsd-src/crypto/external/bsd/openssl.old/lib/libcrypto/arch/powerpc64/keccak1600p8-ppc.S (revision 4724848cf0da353df257f730694b7882798e5daf)
1.machine	"any"
2.text
3
4
5.align	5
6KeccakF1600_int:
7	li	0,24
8	mtctr	0
9	li	0,0
10	b	.Loop
11
12.align	4
13.Loop:
14
15	vxor	26,0, 5
16	vxor	27,1, 6
17	vxor	28,2, 7
18	vxor	29,3, 8
19	vxor	30,4, 9
20.long	0xF3FAD857
21.long	0xF35ADB57
22.long	0xF37CE857
23.long	0xF39CEB57
24.long	0xF3BEF257
25	vxor	26,26,31
26	vxor	27,27,28
27	vxor	28,29,30
28	vspltisb	31,1
29	vxor	26,26,10
30	vxor	27,27,11
31	vxor	28,28,12
32
33.long	0x13BAF8C4
34.long	0x13DBF8C4
35.long	0x13FCF8C4
36.long	0xF3FFEA57
37	vxor	26,26,30
38	vxor	27,27,31
39	vxor	28,28,29
40
41.long	0xF3BAD057
42.long	0xF3DCD257
43.long	0xF3FCE357
44	vxor	1, 1, 29
45	vxor	6, 6, 29
46	vxor	10,10,30
47	vxor	0, 0, 31
48	vxor	5, 5, 31
49
50.long	0xF3BBD857
51.long	0xF3DAD357
52.long	0xF3FADA57
53	vxor	3, 3, 29
54	vxor	8, 8, 29
55	vxor	2, 2, 30
56	vxor	7, 7, 30
57	vxor	11,11,31
58
59.long	0xF3BBDB57
60	vxor	4, 4, 29
61	vxor	9, 9, 29
62	vxor	12,12,29
63
64
65.long	0x134068C4
66.long	0x102170C4
67.long	0x136278C4
68.long	0x138380C4
69.long	0x108488C4
70.long	0x10A590C4
71.long	0x10C698C4
72.long	0x13A7A0C4
73.long	0x1108A8C4
74.long	0x1129B0C4
75.long	0x114AB8C4
76.long	0x13CBC0C4
77.long	0x118CC8C4
78
79
80.long	0xF01AE057
81.long	0xF05D2857
82.long	0xF1692957
83.long	0xF0A12057
84.long	0xF0212357
85.long	0xF0683357
86.long	0xF08CF257
87.long	0xF0E83057
88.long	0xF0DBD357
89.long	0xF109EB57
90.long	0xF18A5357
91.long	0xF12AF157
92.long	0xF15BE157
93
94
95.long	0x7FEC0699
96	addic	0,0,16
97
98	vandc	26,2, 1
99	vandc	27,3, 2
100	vandc	28,4, 3
101	vandc	29,0, 4
102	vandc	30,1, 0
103	vxor	0, 0, 26
104	vxor	1, 1, 27
105	vxor	2, 2, 28
106	vxor	3, 3, 29
107	vxor	4, 4, 30
108
109	vandc	26,7, 6
110	vandc	27,8, 7
111	vandc	28,9, 8
112	vandc	29,5, 9
113	vandc	30,6, 5
114	vxor	5, 5, 26
115	vxor	6, 6, 27
116	vxor	7, 7, 28
117	vxor	8, 8, 29
118	vxor	9, 9, 30
119
120	vxor	0, 0, 31
121
122.long	0xF34A5A57
123.long	0xF36C5057
124.long	0xF38B6257
125.long	0xF3AA5257
126	vandc	26,11,26
127	vandc	27,27,28
128	vandc	28,10,29
129	vxor	10,10,26
130	vxor	11,11,27
131	vxor	12,12,28
132
133	bc	16,0,.Loop
134
135.long	0xF18C6357
136	blr
137.long	0
138.byte	0,12,0x14,0,0,0,0,0
139
140
141
142.align	5
143KeccakF1600:
144	stdu	1,-256(1)
145	li	10,63
146	li	11,79
147	mflr	8
148	mfspr	7,256
149	stvx	20,10,1
150	addi	10,10,32
151	stvx	21,11,1
152	addi	11,11,32
153	stvx	22,10,1
154	addi	10,10,32
155	stvx	23,11,1
156	addi	11,11,32
157	stvx	24,10,1
158	addi	10,10,32
159	stvx	25,11,1
160	addi	11,11,32
161	stvx	26,10,1
162	addi	10,10,32
163	stvx	27,11,1
164	addi	11,11,32
165	stvx	28,10,1
166	addi	10,10,32
167	stvx	29,11,1
168	addi	11,11,32
169	stvx	30,10,1
170	stvx	31,11,1
171	stw	7,252(1)
172	li	0, -1
173	std	8,272(1)
174	mtspr	256,0
175
176	li	11,16
177.long	0x7C001E19
178	li	10,32
179.long	0x7C2B1E19
180	addi	11,11,32
181.long	0x7C4A1E19
182	addi	10,10,32
183.long	0x7C6B1E19
184	addi	11,11,32
185.long	0x7C8A1E19
186	addi	10,10,32
187.long	0x7CAB1E19
188	addi	11,11,32
189.long	0x7CCA1E19
190	addi	10,10,32
191.long	0x7CEB1E19
192	addi	11,11,32
193.long	0x7D0A1E19
194	addi	10,10,32
195.long	0x7D2B1E19
196	addi	11,11,32
197.long	0x7D4A1E19
198	addi	10,10,32
199.long	0x7D6B1E19
200.long	0x7D8A1A99
201
202	bl	PICmeup
203
204	li	11,16
205.long	0x7DA06699
206	li	10,32
207.long	0x7DCB6699
208	addi	11,11,32
209.long	0x7DEA6699
210	addi	10,10,32
211.long	0x7E0B6699
212	addi	11,11,32
213.long	0x7E2A6699
214	addi	10,10,32
215.long	0x7E4B6699
216	addi	11,11,32
217.long	0x7E6A6699
218	addi	10,10,32
219.long	0x7E8B6699
220	addi	11,11,32
221.long	0x7EAA6699
222	addi	10,10,32
223.long	0x7ECB6699
224	addi	11,11,32
225.long	0x7EEA6699
226	addi	10,10,32
227.long	0x7F0B6699
228.long	0x7F2A6699
229	addi	12,12,256
230
231	bl	KeccakF1600_int
232
233	li	11,16
234.long	0x7C001F19
235	li	10,32
236.long	0x7C2B1F19
237	addi	11,11,32
238.long	0x7C4A1F19
239	addi	10,10,32
240.long	0x7C6B1F19
241	addi	11,11,32
242.long	0x7C8A1F19
243	addi	10,10,32
244.long	0x7CAB1F19
245	addi	11,11,32
246.long	0x7CCA1F19
247	addi	10,10,32
248.long	0x7CEB1F19
249	addi	11,11,32
250.long	0x7D0A1F19
251	addi	10,10,32
252.long	0x7D2B1F19
253	addi	11,11,32
254.long	0x7D4A1F19
255	addi	10,10,32
256.long	0x7D6B1F19
257.long	0x7D8A1D99
258
259	li	10,63
260	li	11,79
261	mtlr	8
262	mtspr	256,7
263	lvx	20,10,1
264	addi	10,10,32
265	lvx	21,11,1
266	addi	11,11,32
267	lvx	22,10,1
268	addi	10,10,32
269	lvx	23,11,1
270	addi	11,11,32
271	lvx	24,10,1
272	addi	10,10,32
273	lvx	25,11,1
274	addi	11,11,32
275	lvx	26,10,1
276	addi	10,10,32
277	lvx	27,11,1
278	addi	11,11,32
279	lvx	28,10,1
280	addi	10,10,32
281	lvx	29,11,1
282	addi	11,11,32
283	lvx	30,10,1
284	lvx	31,11,1
285	addi	1,1,256
286	blr
287.long	0
288.byte	0,12,0x04,1,0x80,0,1,0
289.long	0
290
291.globl	SHA3_absorb
292.type	SHA3_absorb,@function
293.section	".opd","aw"
294.align	3
295SHA3_absorb:
296.quad	.SHA3_absorb,.TOC.@tocbase,0
297.previous
298
299.align	5
300.SHA3_absorb:
301	stdu	1,-256(1)
302	li	10,63
303	li	11,79
304	mflr	8
305	mfspr	7,256
306	stvx	20,10,1
307	addi	10,10,32
308	stvx	21,11,1
309	addi	11,11,32
310	stvx	22,10,1
311	addi	10,10,32
312	stvx	23,11,1
313	addi	11,11,32
314	stvx	24,10,1
315	addi	10,10,32
316	stvx	25,11,1
317	addi	11,11,32
318	stvx	26,10,1
319	addi	10,10,32
320	stvx	27,11,1
321	addi	11,11,32
322	stvx	28,10,1
323	addi	10,10,32
324	stvx	29,11,1
325	addi	11,11,32
326	stvx	30,10,1
327	stvx	31,11,1
328	stw	7,252(1)
329	li	0, -1
330	std	8,272(1)
331	mtspr	256,0
332
333	li	11,16
334.long	0x7C001E19
335	li	10,32
336.long	0x7C2B1E19
337	addi	11,11,32
338.long	0x7C4A1E19
339	addi	10,10,32
340.long	0x7C6B1E19
341	addi	11,11,32
342.long	0x7C8A1E19
343	addi	10,10,32
344.long	0x7CAB1E19
345	addi	11,11,32
346.long	0x7CCA1E19
347	addi	10,10,32
348.long	0x7CEB1E19
349	addi	11,11,32
350.long	0x7D0A1E19
351	addi	10,10,32
352.long	0x7D2B1E19
353	addi	11,11,32
354.long	0x7D4A1E19
355	addi	10,10,32
356.long	0x7D6B1E19
357.long	0x7D8A1A99
358
359	bl	PICmeup
360
361	li	11,16
362.long	0x7DA06699
363	li	10,32
364.long	0x7DCB6699
365	addi	11,11,32
366.long	0x7DEA6699
367	addi	10,10,32
368.long	0x7E0B6699
369	addi	11,11,32
370.long	0x7E2A6699
371	addi	10,10,32
372.long	0x7E4B6699
373	addi	11,11,32
374.long	0x7E6A6699
375	addi	10,10,32
376.long	0x7E8B6699
377	addi	11,11,32
378.long	0x7EAA6699
379	addi	10,10,32
380.long	0x7ECB6699
381	addi	11,11,32
382.long	0x7EEA6699
383	addi	10,10,32
384.long	0x7F0B6699
385.long	0x7F2A6699
386	li	10,-32
387	li	11,-16
388	addi	12,12,256
389	b	.Loop_absorb
390
391.align	4
392.Loop_absorb:
393	cmpld	5,6
394	blt	.Labsorbed
395
396	sub	5,5,6
397	srwi	0,6,3
398	mtctr	0
399
400.long	0x7FCA6699
401.long	0x7FEB6699
402	vspltisb	27,7
403	vxor	30,30,27
404	vxor	31,31,27
405
406	vxor	27,27,27
407.long	0x7F402499
408	addi	4,4,8
409	vperm	26,26,27,30
410	vxor	0, 0, 26
411	bdz	.Lprocess_block
412.long	0x7F402499
413	addi	4,4,8
414	vperm	26,26,27,30
415	vxor	1, 1, 26
416	bdz	.Lprocess_block
417.long	0x7F402499
418	addi	4,4,8
419	vperm	26,26,27,30
420	vxor	2, 2, 26
421	bdz	.Lprocess_block
422.long	0x7F402499
423	addi	4,4,8
424	vperm	26,26,27,30
425	vxor	3, 3, 26
426	bdz	.Lprocess_block
427.long	0x7F402499
428	addi	4,4,8
429	vperm	26,26,27,30
430	vxor	4, 4, 26
431	bdz	.Lprocess_block
432.long	0x7F402499
433	addi	4,4,8
434	vperm	26,26,27,31
435	vxor	0, 0, 26
436	bdz	.Lprocess_block
437.long	0x7F402499
438	addi	4,4,8
439	vperm	26,26,27,31
440	vxor	1, 1, 26
441	bdz	.Lprocess_block
442.long	0x7F402499
443	addi	4,4,8
444	vperm	26,26,27,31
445	vxor	2, 2, 26
446	bdz	.Lprocess_block
447.long	0x7F402499
448	addi	4,4,8
449	vperm	26,26,27,31
450	vxor	3, 3, 26
451	bdz	.Lprocess_block
452.long	0x7F402499
453	addi	4,4,8
454	vperm	26,26,27,31
455	vxor	4, 4, 26
456	bdz	.Lprocess_block
457.long	0x7F402499
458	addi	4,4,8
459	vperm	26,26,27,30
460	vxor	5, 5, 26
461	bdz	.Lprocess_block
462.long	0x7F402499
463	addi	4,4,8
464	vperm	26,26,27,30
465	vxor	6, 6, 26
466	bdz	.Lprocess_block
467.long	0x7F402499
468	addi	4,4,8
469	vperm	26,26,27,30
470	vxor	7, 7, 26
471	bdz	.Lprocess_block
472.long	0x7F402499
473	addi	4,4,8
474	vperm	26,26,27,30
475	vxor	8, 8, 26
476	bdz	.Lprocess_block
477.long	0x7F402499
478	addi	4,4,8
479	vperm	26,26,27,30
480	vxor	9, 9, 26
481	bdz	.Lprocess_block
482.long	0x7F402499
483	addi	4,4,8
484	vperm	26,26,27,31
485	vxor	5, 5, 26
486	bdz	.Lprocess_block
487.long	0x7F402499
488	addi	4,4,8
489	vperm	26,26,27,31
490	vxor	6, 6, 26
491	bdz	.Lprocess_block
492.long	0x7F402499
493	addi	4,4,8
494	vperm	26,26,27,31
495	vxor	7, 7, 26
496	bdz	.Lprocess_block
497.long	0x7F402499
498	addi	4,4,8
499	vperm	26,26,27,31
500	vxor	8, 8, 26
501	bdz	.Lprocess_block
502.long	0x7F402499
503	addi	4,4,8
504	vperm	26,26,27,31
505	vxor	9, 9, 26
506	bdz	.Lprocess_block
507.long	0x7F402499
508	addi	4,4,8
509	vperm	26,26,27,30
510	vxor	10, 10, 26
511	bdz	.Lprocess_block
512.long	0x7F402499
513	addi	4,4,8
514	vperm	26,26,27,31
515	vxor	10, 10, 26
516	bdz	.Lprocess_block
517.long	0x7F402499
518	addi	4,4,8
519	vperm	26,26,27,30
520	vxor	11, 11, 26
521	bdz	.Lprocess_block
522.long	0x7F402499
523	addi	4,4,8
524	vperm	26,26,27,31
525	vxor	11, 11, 26
526	bdz	.Lprocess_block
527.long	0x7F402499
528	addi	4,4,8
529	vperm	26,26,27,31
530	vxor	12, 12, 26
531
532.Lprocess_block:
533	bl	KeccakF1600_int
534
535	b	.Loop_absorb
536
537.align	4
538.Labsorbed:
539	li	11,16
540.long	0x7C001F19
541	li	10,32
542.long	0x7C2B1F19
543	addi	11,11,32
544.long	0x7C4A1F19
545	addi	10,10,32
546.long	0x7C6B1F19
547	addi	11,11,32
548.long	0x7C8A1F19
549	addi	10,10,32
550.long	0x7CAB1F19
551	addi	11,11,32
552.long	0x7CCA1F19
553	addi	10,10,32
554.long	0x7CEB1F19
555	addi	11,11,32
556.long	0x7D0A1F19
557	addi	10,10,32
558.long	0x7D2B1F19
559	addi	11,11,32
560.long	0x7D4A1F19
561	addi	10,10,32
562.long	0x7D6B1F19
563.long	0x7D8A1D99
564
565	mr	3,5
566	li	10,63
567	li	11,79
568	mtlr	8
569	mtspr	256,7
570	lvx	20,10,1
571	addi	10,10,32
572	lvx	21,11,1
573	addi	11,11,32
574	lvx	22,10,1
575	addi	10,10,32
576	lvx	23,11,1
577	addi	11,11,32
578	lvx	24,10,1
579	addi	10,10,32
580	lvx	25,11,1
581	addi	11,11,32
582	lvx	26,10,1
583	addi	10,10,32
584	lvx	27,11,1
585	addi	11,11,32
586	lvx	28,10,1
587	addi	10,10,32
588	lvx	29,11,1
589	addi	11,11,32
590	lvx	30,10,1
591	lvx	31,11,1
592	addi	1,1,256
593	blr
594.long	0
595.byte	0,12,0x04,1,0x80,0,4,0
596.long	0
597
598.globl	SHA3_squeeze
599.type	SHA3_squeeze,@function
600.section	".opd","aw"
601.align	3
602SHA3_squeeze:
603.quad	.SHA3_squeeze,.TOC.@tocbase,0
604.previous
605
606.align	5
607.SHA3_squeeze:
608	mflr	9
609	subi	4,4,1
610	addi	8,3,4
611	mr	10,6
612	li	11,0
613	b	.Loop_squeeze
614.align	4
615.Loop_squeeze:
616	lwzx	7,11,8
617	lwzx	0,11,3
618	cmpldi	5,8
619	blt	.Lsqueeze_tail
620
621	stbu	7,1(4)
622	srwi	7,7,8
623	stbu	7,1(4)
624	srwi	7,7,8
625	stbu	7,1(4)
626	srwi	7,7,8
627	stbu	7,1(4)
628	stbu	0,1(4)
629	srwi	0,0,8
630	stbu	0,1(4)
631	srwi	0,0,8
632	stbu	0,1(4)
633	srwi	0,0,8
634	stbu	0,1(4)
635
636	subic.	5,5,8
637	bclr	12,2
638
639	subic.	10,10,8
640	ble	.Loutput_expand
641
642	addi	11,11,16
643	cmplwi	11,80
644	blt	.Loop_squeeze
645	subi	11,11,72
646	beq	.Loop_squeeze
647	addi	11,11,72
648	cmplwi	11,88
649	subi	11,11,8
650	beq	.Loop_squeeze
651	addi	11,11,8
652	cmplwi	11,160
653	subi	11,11,72
654	beq	.Loop_squeeze
655	addi	11,11,72
656	blt	.Loop_squeeze
657	subi	11,11,8
658	b	.Loop_squeeze
659
660.align	4
661.Loutput_expand:
662	bl	KeccakF1600
663	mtlr	9
664
665	addi	8,3,4
666	mr	10,6
667	li	11,0
668	b	.Loop_squeeze
669
670.align	4
671.Lsqueeze_tail:
672	mtctr	5
673	subic.	5,5,4
674	ble	.Loop_tail_lo
675	li	8,4
676	mtctr	8
677.Loop_tail_lo:
678	stbu	7,1(4)
679	srdi	7,7,8
680	bc	16,0,.Loop_tail_lo
681	ble	.Lsqueeze_done
682	mtctr	5
683.Loop_tail_hi:
684	stbu	0,1(4)
685	srdi	0,0,8
686	bc	16,0,.Loop_tail_hi
687
688.Lsqueeze_done:
689	blr
690.long	0
691.byte	0,12,0x14,0,0,0,4,0
692.long	0
693
694.align	6
695PICmeup:
696	mflr	0
697	bcl	20,31,$+4
698	mflr	12
699	addi	12,12,56
700	mtlr	0
701	blr
702.long	0
703.byte	0,12,0x14,0,0,0,0,0
704.space	28
705
706.align	6
707rhotates:
708.long	0,0
709.long	0,36
710.long	0,1
711.long	0,44
712.long	0,62
713.long	0,6
714.long	0,28
715.long	0,55
716.long	0,27
717.long	0,20
718.long	0,3
719.long	0,41
720.long	0,10
721.long	0,45
722.long	0,43
723.long	0,15
724.long	0,25
725.long	0,21
726.long	0,39
727.long	0,8
728.long	0,18
729.long	0,2
730.long	0,61
731.long	0,56
732.long	0,14
733.long	0,14
734
735.long	0,0
736.long	0,0
737.long	0x00010203,0x04050607
738.long	0x10111213,0x14151617
739.long	0x10111213,0x14151617
740.long	0x00010203,0x04050607
741
742iotas:
743.long	0x00000000,0x00000001
744.long	0,0
745.long	0x00000000,0x00008082
746.long	0,0
747.long	0x80000000,0x0000808a
748.long	0,0
749.long	0x80000000,0x80008000
750.long	0,0
751.long	0x00000000,0x0000808b
752.long	0,0
753.long	0x00000000,0x80000001
754.long	0,0
755.long	0x80000000,0x80008081
756.long	0,0
757.long	0x80000000,0x00008009
758.long	0,0
759.long	0x00000000,0x0000008a
760.long	0,0
761.long	0x00000000,0x00000088
762.long	0,0
763.long	0x00000000,0x80008009
764.long	0,0
765.long	0x00000000,0x8000000a
766.long	0,0
767.long	0x00000000,0x8000808b
768.long	0,0
769.long	0x80000000,0x0000008b
770.long	0,0
771.long	0x80000000,0x00008089
772.long	0,0
773.long	0x80000000,0x00008003
774.long	0,0
775.long	0x80000000,0x00008002
776.long	0,0
777.long	0x80000000,0x00000080
778.long	0,0
779.long	0x00000000,0x0000800a
780.long	0,0
781.long	0x80000000,0x8000000a
782.long	0,0
783.long	0x80000000,0x80008081
784.long	0,0
785.long	0x80000000,0x00008080
786.long	0,0
787.long	0x00000000,0x80000001
788.long	0,0
789.long	0x80000000,0x80008008
790.long	0,0
791
792.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,111,119,101,114,73,83,65,32,50,46,48,55,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
793.align	2
794