xref: /netbsd-src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc/keccak1600p8-ppc.S (revision 20a155e502d49156e8c5641bc52fbc62680d15d2)
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	stwu	1,-232(1)
145	li	10,39
146	li	11,55
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,228(1)
172	li	0, -1
173	stw	8,236(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,39
260	li	11,55
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,232
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
294.align	5
295SHA3_absorb:
296	stwu	1,-232(1)
297	li	10,39
298	li	11,55
299	mflr	8
300	mfspr	7,256
301	stvx	20,10,1
302	addi	10,10,32
303	stvx	21,11,1
304	addi	11,11,32
305	stvx	22,10,1
306	addi	10,10,32
307	stvx	23,11,1
308	addi	11,11,32
309	stvx	24,10,1
310	addi	10,10,32
311	stvx	25,11,1
312	addi	11,11,32
313	stvx	26,10,1
314	addi	10,10,32
315	stvx	27,11,1
316	addi	11,11,32
317	stvx	28,10,1
318	addi	10,10,32
319	stvx	29,11,1
320	addi	11,11,32
321	stvx	30,10,1
322	stvx	31,11,1
323	stw	7,228(1)
324	li	0, -1
325	stw	8,236(1)
326	mtspr	256,0
327
328	li	11,16
329.long	0x7C001E19
330	li	10,32
331.long	0x7C2B1E19
332	addi	11,11,32
333.long	0x7C4A1E19
334	addi	10,10,32
335.long	0x7C6B1E19
336	addi	11,11,32
337.long	0x7C8A1E19
338	addi	10,10,32
339.long	0x7CAB1E19
340	addi	11,11,32
341.long	0x7CCA1E19
342	addi	10,10,32
343.long	0x7CEB1E19
344	addi	11,11,32
345.long	0x7D0A1E19
346	addi	10,10,32
347.long	0x7D2B1E19
348	addi	11,11,32
349.long	0x7D4A1E19
350	addi	10,10,32
351.long	0x7D6B1E19
352.long	0x7D8A1A99
353
354	bl	PICmeup
355
356	li	11,16
357.long	0x7DA06699
358	li	10,32
359.long	0x7DCB6699
360	addi	11,11,32
361.long	0x7DEA6699
362	addi	10,10,32
363.long	0x7E0B6699
364	addi	11,11,32
365.long	0x7E2A6699
366	addi	10,10,32
367.long	0x7E4B6699
368	addi	11,11,32
369.long	0x7E6A6699
370	addi	10,10,32
371.long	0x7E8B6699
372	addi	11,11,32
373.long	0x7EAA6699
374	addi	10,10,32
375.long	0x7ECB6699
376	addi	11,11,32
377.long	0x7EEA6699
378	addi	10,10,32
379.long	0x7F0B6699
380.long	0x7F2A6699
381	li	10,-32
382	li	11,-16
383	addi	12,12,256
384	b	.Loop_absorb
385
386.align	4
387.Loop_absorb:
388	.long	0x7c053040
389	blt	.Labsorbed
390
391	sub	5,5,6
392	srwi	0,6,3
393	mtctr	0
394
395.long	0x7FCA6699
396.long	0x7FEB6699
397	vspltisb	27,7
398	vxor	30,30,27
399	vxor	31,31,27
400
401	vxor	27,27,27
402.long	0x7F402499
403	addi	4,4,8
404	vperm	26,26,27,30
405	vxor	0, 0, 26
406	bdz	.Lprocess_block
407.long	0x7F402499
408	addi	4,4,8
409	vperm	26,26,27,30
410	vxor	1, 1, 26
411	bdz	.Lprocess_block
412.long	0x7F402499
413	addi	4,4,8
414	vperm	26,26,27,30
415	vxor	2, 2, 26
416	bdz	.Lprocess_block
417.long	0x7F402499
418	addi	4,4,8
419	vperm	26,26,27,30
420	vxor	3, 3, 26
421	bdz	.Lprocess_block
422.long	0x7F402499
423	addi	4,4,8
424	vperm	26,26,27,30
425	vxor	4, 4, 26
426	bdz	.Lprocess_block
427.long	0x7F402499
428	addi	4,4,8
429	vperm	26,26,27,31
430	vxor	0, 0, 26
431	bdz	.Lprocess_block
432.long	0x7F402499
433	addi	4,4,8
434	vperm	26,26,27,31
435	vxor	1, 1, 26
436	bdz	.Lprocess_block
437.long	0x7F402499
438	addi	4,4,8
439	vperm	26,26,27,31
440	vxor	2, 2, 26
441	bdz	.Lprocess_block
442.long	0x7F402499
443	addi	4,4,8
444	vperm	26,26,27,31
445	vxor	3, 3, 26
446	bdz	.Lprocess_block
447.long	0x7F402499
448	addi	4,4,8
449	vperm	26,26,27,31
450	vxor	4, 4, 26
451	bdz	.Lprocess_block
452.long	0x7F402499
453	addi	4,4,8
454	vperm	26,26,27,30
455	vxor	5, 5, 26
456	bdz	.Lprocess_block
457.long	0x7F402499
458	addi	4,4,8
459	vperm	26,26,27,30
460	vxor	6, 6, 26
461	bdz	.Lprocess_block
462.long	0x7F402499
463	addi	4,4,8
464	vperm	26,26,27,30
465	vxor	7, 7, 26
466	bdz	.Lprocess_block
467.long	0x7F402499
468	addi	4,4,8
469	vperm	26,26,27,30
470	vxor	8, 8, 26
471	bdz	.Lprocess_block
472.long	0x7F402499
473	addi	4,4,8
474	vperm	26,26,27,30
475	vxor	9, 9, 26
476	bdz	.Lprocess_block
477.long	0x7F402499
478	addi	4,4,8
479	vperm	26,26,27,31
480	vxor	5, 5, 26
481	bdz	.Lprocess_block
482.long	0x7F402499
483	addi	4,4,8
484	vperm	26,26,27,31
485	vxor	6, 6, 26
486	bdz	.Lprocess_block
487.long	0x7F402499
488	addi	4,4,8
489	vperm	26,26,27,31
490	vxor	7, 7, 26
491	bdz	.Lprocess_block
492.long	0x7F402499
493	addi	4,4,8
494	vperm	26,26,27,31
495	vxor	8, 8, 26
496	bdz	.Lprocess_block
497.long	0x7F402499
498	addi	4,4,8
499	vperm	26,26,27,31
500	vxor	9, 9, 26
501	bdz	.Lprocess_block
502.long	0x7F402499
503	addi	4,4,8
504	vperm	26,26,27,30
505	vxor	10, 10, 26
506	bdz	.Lprocess_block
507.long	0x7F402499
508	addi	4,4,8
509	vperm	26,26,27,31
510	vxor	10, 10, 26
511	bdz	.Lprocess_block
512.long	0x7F402499
513	addi	4,4,8
514	vperm	26,26,27,30
515	vxor	11, 11, 26
516	bdz	.Lprocess_block
517.long	0x7F402499
518	addi	4,4,8
519	vperm	26,26,27,31
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	12, 12, 26
526
527.Lprocess_block:
528	bl	KeccakF1600_int
529
530	b	.Loop_absorb
531
532.align	4
533.Labsorbed:
534	li	11,16
535.long	0x7C001F19
536	li	10,32
537.long	0x7C2B1F19
538	addi	11,11,32
539.long	0x7C4A1F19
540	addi	10,10,32
541.long	0x7C6B1F19
542	addi	11,11,32
543.long	0x7C8A1F19
544	addi	10,10,32
545.long	0x7CAB1F19
546	addi	11,11,32
547.long	0x7CCA1F19
548	addi	10,10,32
549.long	0x7CEB1F19
550	addi	11,11,32
551.long	0x7D0A1F19
552	addi	10,10,32
553.long	0x7D2B1F19
554	addi	11,11,32
555.long	0x7D4A1F19
556	addi	10,10,32
557.long	0x7D6B1F19
558.long	0x7D8A1D99
559
560	mr	3,5
561	li	10,39
562	li	11,55
563	mtlr	8
564	mtspr	256,7
565	lvx	20,10,1
566	addi	10,10,32
567	lvx	21,11,1
568	addi	11,11,32
569	lvx	22,10,1
570	addi	10,10,32
571	lvx	23,11,1
572	addi	11,11,32
573	lvx	24,10,1
574	addi	10,10,32
575	lvx	25,11,1
576	addi	11,11,32
577	lvx	26,10,1
578	addi	10,10,32
579	lvx	27,11,1
580	addi	11,11,32
581	lvx	28,10,1
582	addi	10,10,32
583	lvx	29,11,1
584	addi	11,11,32
585	lvx	30,10,1
586	lvx	31,11,1
587	addi	1,1,232
588	blr
589.long	0
590.byte	0,12,0x04,1,0x80,0,4,0
591.long	0
592
593.globl	SHA3_squeeze
594.type	SHA3_squeeze,@function
595
596.align	5
597SHA3_squeeze:
598	mflr	9
599	subi	4,4,1
600	addi	8,3,4
601	mr	10,6
602	li	11,0
603	b	.Loop_squeeze
604.align	4
605.Loop_squeeze:
606	lwzx	7,11,8
607	lwzx	0,11,3
608	cmplwi	5,8
609	blt	.Lsqueeze_tail
610
611	stbu	7,1(4)
612	srwi	7,7,8
613	stbu	7,1(4)
614	srwi	7,7,8
615	stbu	7,1(4)
616	srwi	7,7,8
617	stbu	7,1(4)
618	stbu	0,1(4)
619	srwi	0,0,8
620	stbu	0,1(4)
621	srwi	0,0,8
622	stbu	0,1(4)
623	srwi	0,0,8
624	stbu	0,1(4)
625
626	subic.	5,5,8
627	bclr	12,2
628
629	subic.	10,10,8
630	ble	.Loutput_expand
631
632	addi	11,11,16
633	cmplwi	11,80
634	blt	.Loop_squeeze
635	subi	11,11,72
636	beq	.Loop_squeeze
637	addi	11,11,72
638	cmplwi	11,88
639	subi	11,11,8
640	beq	.Loop_squeeze
641	addi	11,11,8
642	cmplwi	11,160
643	subi	11,11,72
644	beq	.Loop_squeeze
645	addi	11,11,72
646	blt	.Loop_squeeze
647	subi	11,11,8
648	b	.Loop_squeeze
649
650.align	4
651.Loutput_expand:
652	bl	KeccakF1600
653	mtlr	9
654
655	addi	8,3,4
656	mr	10,6
657	li	11,0
658	b	.Loop_squeeze
659
660.align	4
661.Lsqueeze_tail:
662	mtctr	5
663	subic.	5,5,4
664	ble	.Loop_tail_lo
665	li	8,4
666	mtctr	8
667.Loop_tail_lo:
668	stbu	7,1(4)
669	srdi	7,7,8
670	bc	16,0,.Loop_tail_lo
671	ble	.Lsqueeze_done
672	mtctr	5
673.Loop_tail_hi:
674	stbu	0,1(4)
675	srdi	0,0,8
676	bc	16,0,.Loop_tail_hi
677
678.Lsqueeze_done:
679	blr
680.long	0
681.byte	0,12,0x14,0,0,0,4,0
682.long	0
683
684.align	6
685PICmeup:
686	mflr	0
687	bcl	20,31,$+4
688	mflr	12
689	addi	12,12,56
690	mtlr	0
691	blr
692.long	0
693.byte	0,12,0x14,0,0,0,0,0
694.space	28
695
696.align	6
697rhotates:
698.long	0,0
699.long	0,36
700.long	0,1
701.long	0,44
702.long	0,62
703.long	0,6
704.long	0,28
705.long	0,55
706.long	0,27
707.long	0,20
708.long	0,3
709.long	0,41
710.long	0,10
711.long	0,45
712.long	0,43
713.long	0,15
714.long	0,25
715.long	0,21
716.long	0,39
717.long	0,8
718.long	0,18
719.long	0,2
720.long	0,61
721.long	0,56
722.long	0,14
723.long	0,14
724
725.long	0,0
726.long	0,0
727.long	0x00010203,0x04050607
728.long	0x10111213,0x14151617
729.long	0x10111213,0x14151617
730.long	0x00010203,0x04050607
731
732iotas:
733.long	0x00000000,0x00000001
734.long	0,0
735.long	0x00000000,0x00008082
736.long	0,0
737.long	0x80000000,0x0000808a
738.long	0,0
739.long	0x80000000,0x80008000
740.long	0,0
741.long	0x00000000,0x0000808b
742.long	0,0
743.long	0x00000000,0x80000001
744.long	0,0
745.long	0x80000000,0x80008081
746.long	0,0
747.long	0x80000000,0x00008009
748.long	0,0
749.long	0x00000000,0x0000008a
750.long	0,0
751.long	0x00000000,0x00000088
752.long	0,0
753.long	0x00000000,0x80008009
754.long	0,0
755.long	0x00000000,0x8000000a
756.long	0,0
757.long	0x00000000,0x8000808b
758.long	0,0
759.long	0x80000000,0x0000008b
760.long	0,0
761.long	0x80000000,0x00008089
762.long	0,0
763.long	0x80000000,0x00008003
764.long	0,0
765.long	0x80000000,0x00008002
766.long	0,0
767.long	0x80000000,0x00000080
768.long	0,0
769.long	0x00000000,0x0000800a
770.long	0,0
771.long	0x80000000,0x8000000a
772.long	0,0
773.long	0x80000000,0x80008081
774.long	0,0
775.long	0x80000000,0x00008080
776.long	0,0
777.long	0x00000000,0x80000001
778.long	0,0
779.long	0x80000000,0x80008008
780.long	0,0
781
782.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
783.align	2
784