xref: /netbsd-src/crypto/external/bsd/openssl/lib/libcrypto/arch/powerpc64/poly1305-ppcfp.S (revision bdc22b2e01993381dcefeff2bc9b56ca75a4235c)
1.machine	"any"
2.text
3
4.globl	poly1305_init_fpu
5.type	poly1305_init_fpu,@function
6.section	".opd","aw"
7.align	3
8poly1305_init_fpu:
9.quad	.poly1305_init_fpu,.TOC.@tocbase,0
10.previous
11
12.align	6
13.poly1305_init_fpu:
14	stdu	1,-48(1)
15	mflr	6
16	std	6,64(1)
17
18	bl	.LPICmeup
19
20	xor	0,0,0
21	mtlr	6
22
23	lfd	8,8*0(5)
24	lfd	9,8*1(5)
25	lfd	10,8*2(5)
26	lfd	11,8*3(5)
27	lfd	12,8*4(5)
28	lfd	13,8*5(5)
29
30	stfd	8,8*0(3)
31	stfd	9,8*1(3)
32	stfd	10,8*2(3)
33	stfd	11,8*3(3)
34
35	cmpld	4,0
36	beq-	.Lno_key
37
38	lfd	6,8*13(5)
39	mffs	7
40
41	stfd	8,8*4(3)
42	stfd	9,8*5(3)
43	stfd	10,8*6(3)
44	stfd	11,8*7(3)
45
46	li	8,4
47	li	9,8
48	li	10,12
49	lwbrx	7,0,4
50	lwbrx	8,8,4
51	lwbrx	9,9,4
52	lwbrx	10,10,4
53
54	lis	11,0xf000
55	ori	12,11,3
56	andc	7,7,11
57	andc	8,8,12
58	andc	9,9,12
59	andc	10,10,12
60
61	stw	7,36(3)
62	stw	8,44(3)
63	stw	9,52(3)
64	stw	10,60(3)
65
66	mtfsf	255,6
67	stfd	8,8*18(3)
68	stfd	9,8*19(3)
69	stfd	10,8*20(3)
70	stfd	11,8*21(3)
71	stfd	12,8*22(3)
72	stfd	13,8*23(3)
73
74	lfd	0,8*4(3)
75	lfd	2,8*5(3)
76	lfd	4,8*6(3)
77	lfd	6,8*7(3)
78
79	fsub	0,0,8
80	fsub	2,2,9
81	fsub	4,4,10
82	fsub	6,6,11
83
84	lfd	8,8*6(5)
85	lfd	9,8*7(5)
86	lfd	10,8*8(5)
87	lfd	11,8*9(5)
88
89	fmul	3,2,13
90	fmul	5,4,13
91	stfd	7,8*15(3)
92	fmul	7,6,13
93
94	fadd	1,0,8
95	stfd	3,8*12(3)
96	fadd	3,2,9
97	stfd	5,8*13(3)
98	fadd	5,4,10
99	stfd	7,8*14(3)
100	fadd	7,6,11
101
102	fsub	1,1,8
103	fsub	3,3,9
104	fsub	5,5,10
105	fsub	7,7,11
106
107	lfd	8,8*10(5)
108	lfd	9,8*11(5)
109	lfd	10,8*12(5)
110
111	fsub	0,0,1
112	fsub	2,2,3
113	fsub	4,4,5
114	fsub	6,6,7
115
116	stfd	1,8*5(3)
117	stfd	3,8*7(3)
118	stfd	5,8*9(3)
119	stfd	7,8*11(3)
120
121	stfd	0,8*4(3)
122	stfd	2,8*6(3)
123	stfd	4,8*8(3)
124	stfd	6,8*10(3)
125
126	lfd	2,8*12(3)
127	lfd	4,8*13(3)
128	lfd	6,8*14(3)
129	lfd	0,8*15(3)
130
131	fadd	3,2,8
132	fadd	5,4,9
133	fadd	7,6,10
134
135	fsub	3,3,8
136	fsub	5,5,9
137	fsub	7,7,10
138
139	fsub	2,2,3
140	fsub	4,4,5
141	fsub	6,6,7
142
143	stfd	3,8*13(3)
144	stfd	5,8*15(3)
145	stfd	7,8*17(3)
146
147	stfd	2,8*12(3)
148	stfd	4,8*14(3)
149	stfd	6,8*16(3)
150
151	mtfsf	255,0
152.Lno_key:
153	xor	3,3,3
154	addi	1,1,48
155	blr
156.long	0
157.byte	0,12,4,1,0x80,0,2,0
158
159
160.globl	poly1305_blocks_fpu
161.type	poly1305_blocks_fpu,@function
162.section	".opd","aw"
163.align	3
164poly1305_blocks_fpu:
165.quad	.poly1305_blocks_fpu,.TOC.@tocbase,0
166.previous
167
168.align	4
169.poly1305_blocks_fpu:
170	srwi.	5,5,4
171	beq-	.Labort
172
173	stdu	1,-240(1)
174	mflr	0
175	stfd	14,96(1)
176	stfd	15,104(1)
177	stfd	16,112(1)
178	stfd	17,120(1)
179	stfd	18,128(1)
180	stfd	19,136(1)
181	stfd	20,144(1)
182	stfd	21,152(1)
183	stfd	22,160(1)
184	stfd	23,168(1)
185	stfd	24,176(1)
186	stfd	25,184(1)
187	stfd	26,192(1)
188	stfd	27,200(1)
189	stfd	28,208(1)
190	stfd	29,216(1)
191	stfd	30,224(1)
192	stfd	31,232(1)
193	std	0,256(1)
194
195	xor	0,0,0
196	li	10,1
197	mtctr	5
198	neg	5,5
199	stw	0,80(1)
200	stw	10,84(1)
201
202	lfd	8,8*18(3)
203	lfd	9,8*19(3)
204	lfd	10,8*20(3)
205	lfd	11,8*21(3)
206	lfd	12,8*22(3)
207	lfd	13,8*23(3)
208
209	lfd	0,8*0(3)
210	lfd	2,8*1(3)
211	lfd	4,8*2(3)
212	lfd	6,8*3(3)
213
214	stfd	8,48(1)
215	oris	10,6,18736
216	stfd	9,56(1)
217	stfd	10,64(1)
218	stw	10,72(1)
219
220	li	11,4
221	li	12,8
222	li	6,12
223	lwbrx	7,0,4
224	lwbrx	8,11,4
225	lwbrx	9,12,4
226	lwbrx	10,6,4
227	addi	4,4,16
228
229	stw	7,52(1)
230	stw	8,60(1)
231	stw	9,68(1)
232	stw	10,76(1)
233
234	mffs	28
235	lfd	29,80(1)
236	lfd	14,8*4(3)
237	lfd	15,8*5(3)
238	lfd	16,8*6(3)
239	lfd	17,8*7(3)
240	lfd	18,8*8(3)
241	lfd	19,8*9(3)
242	lfd	24,8*10(3)
243	lfd	25,8*11(3)
244	lfd	26,8*12(3)
245	lfd	27,8*13(3)
246	lfd	20,8*14(3)
247	lfd	21,8*15(3)
248	lfd	22,8*16(3)
249	lfd	23,8*17(3)
250
251	stfd	28,80(1)
252	mtfsf	255,29
253
254	addic	5,5,1
255	addze	0,0
256	slwi.	0,0,4
257	sub	4,4,0
258
259	lfd	28,48(1)
260	lfd	29,56(1)
261	lfd	30,64(1)
262	lfd	31,72(1)
263
264	fsub	0,0,8
265	lwbrx	7,0,4
266	fsub	2,2,9
267	lwbrx	8,11,4
268	fsub	4,4,10
269	lwbrx	9,12,4
270	fsub	6,6,11
271	lwbrx	10,6,4
272
273	fsub	28,28,8
274	addi	4,4,16
275	fsub	29,29,9
276	fsub	30,30,10
277	fsub	31,31,11
278
279	fadd	28,28,0
280	stw	7,52(1)
281	fadd	29,29,2
282	stw	8,60(1)
283	fadd	30,30,4
284	stw	9,68(1)
285	fadd	31,31,6
286	stw	10,76(1)
287
288	b	.Lentry
289
290.align	4
291.Loop:
292	fsub	30,30,8
293	addic	5,5,1
294	fsub	31,31,9
295	addze	0,0
296	fsub	26,26,10
297	slwi.	0,0,4
298	fsub	27,27,11
299	sub	4,4,0
300
301	fadd	0,0,30
302	fadd	1,1,31
303	fadd	4,4,26
304	fadd	5,5,27
305
306
307	fadd	26,2,10
308	lwbrx	7,0,4
309	fadd	27,3,10
310	lwbrx	8,11,4
311	fadd	30,6,12
312	lwbrx	9,12,4
313	fadd	31,7,12
314	lwbrx	10,6,4
315	fadd	24,0,9
316	addi	4,4,16
317	fadd	25,1,9
318	fadd	28,4,11
319	fadd	29,5,11
320
321	fsub	26,26,10
322	stw	7,52(1)
323	fsub	27,27,10
324	stw	8,60(1)
325	fsub	30,30,12
326	stw	9,68(1)
327	fsub	31,31,12
328	stw	10,76(1)
329	fsub	24,24,9
330	fsub	25,25,9
331	fsub	28,28,11
332	fsub	29,29,11
333
334	fsub	2,2,26
335	fsub	3,3,27
336	fsub	6,6,30
337	fsub	7,7,31
338	fsub	4,4,28
339	fsub	5,5,29
340	fsub	0,0,24
341	fsub	1,1,25
342
343	fadd	2,2,24
344	fadd	3,3,25
345	fadd	6,6,28
346	fadd	7,7,29
347	fadd	4,4,26
348	fadd	5,5,27
349	fmadd	0,30,13,0
350	fmadd	1,31,13,1
351
352	fadd	29,2,3
353	lfd	26,8*12(3)
354	fadd	31,6,7
355	lfd	27,8*13(3)
356	fadd	30,4,5
357	lfd	24,8*10(3)
358	fadd	28,0,1
359	lfd	25,8*11(3)
360.Lentry:
361	fmul	0,22,29
362	fmul	1,23,29
363	fmul	4,16,29
364	fmul	5,17,29
365	fmul	2,14,29
366	fmul	3,15,29
367	fmul	6,18,29
368	fmul	7,19,29
369
370	fmadd	0,26,31,0
371	fmadd	1,27,31,1
372	fmadd	4,22,31,4
373	fmadd	5,23,31,5
374	fmadd	2,20,31,2
375	fmadd	3,21,31,3
376	fmadd	6,14,31,6
377	fmadd	7,15,31,7
378
379	fmadd	0,20,30,0
380	fmadd	1,21,30,1
381	fmadd	4,14,30,4
382	fmadd	5,15,30,5
383	fmadd	2,22,30,2
384	fmadd	3,23,30,3
385	fmadd	6,16,30,6
386	fmadd	7,17,30,7
387
388	fmadd	0,14,28,0
389	lfd	30,48(1)
390	fmadd	1,15,28,1
391	lfd	31,56(1)
392	fmadd	4,18,28,4
393	lfd	26,64(1)
394	fmadd	5,19,28,5
395	lfd	27,72(1)
396	fmadd	2,16,28,2
397	fmadd	3,17,28,3
398	fmadd	6,24,28,6
399	fmadd	7,25,28,7
400
401	bc	16,0,.Loop
402
403
404	fadd	24,0,9
405	fadd	25,1,9
406	fadd	28,4,11
407	fadd	29,5,11
408	fadd	26,2,10
409	fadd	27,3,10
410	fadd	30,6,12
411	fadd	31,7,12
412
413	fsub	24,24,9
414	fsub	25,25,9
415	fsub	28,28,11
416	fsub	29,29,11
417	fsub	26,26,10
418	fsub	27,27,10
419	fsub	30,30,12
420	fsub	31,31,12
421
422	fsub	2,2,26
423	fsub	3,3,27
424	fsub	6,6,30
425	fsub	7,7,31
426	fsub	4,4,28
427	fsub	5,5,29
428	fsub	0,0,24
429	fsub	1,1,25
430
431	fadd	2,2,24
432	fadd	3,3,25
433	fadd	6,6,28
434	fadd	7,7,29
435	fadd	4,4,26
436	fadd	5,5,27
437	fmadd	0,30,13,0
438	fmadd	1,31,13,1
439
440	fadd	29,2,3
441	fadd	31,6,7
442	fadd	30,4,5
443	fadd	28,0,1
444
445	lfd	0,80(1)
446	fadd	29,29,9
447	fadd	31,31,11
448	fadd	30,30,10
449	fadd	28,28,8
450
451	stfd	29,8*1(3)
452	stfd	31,8*3(3)
453	stfd	30,8*2(3)
454	stfd	28,8*0(3)
455
456	mtfsf	255,0
457	lfd	14,96(1)
458	lfd	15,104(1)
459	lfd	16,112(1)
460	lfd	17,120(1)
461	lfd	18,128(1)
462	lfd	19,136(1)
463	lfd	20,144(1)
464	lfd	21,152(1)
465	lfd	22,160(1)
466	lfd	23,168(1)
467	lfd	24,176(1)
468	lfd	25,184(1)
469	lfd	26,192(1)
470	lfd	27,200(1)
471	lfd	28,208(1)
472	lfd	29,216(1)
473	lfd	30,224(1)
474	lfd	31,232(1)
475	addi	1,1,240
476.Labort:
477	blr
478.long	0
479.byte	0,12,4,1,0x80,0,4,0
480
481.globl	poly1305_emit_fpu
482.type	poly1305_emit_fpu,@function
483.section	".opd","aw"
484.align	3
485poly1305_emit_fpu:
486.quad	.poly1305_emit_fpu,.TOC.@tocbase,0
487.previous
488
489.align	4
490.poly1305_emit_fpu:
491	stdu	1,-80(1)
492	mflr	0
493	std	28,48(1)
494	std	29,56(1)
495	std	30,64(1)
496	std	31,72(1)
497	std	0,96(1)
498
499	lwz	28,0(3)
500	lwz	7,4(3)
501	lwz	29,8(3)
502	lwz	8,12(3)
503	lwz	30,16(3)
504	lwz	9,20(3)
505	lwz	31,24(3)
506	lwz	10,28(3)
507
508	lis	0,0xfff0
509	andc	28,28,0
510	andc	29,29,0
511	andc	30,30,0
512	andc	31,31,0
513	li	0,3
514
515	srwi	6,31,2
516	and	11,31,0
517	andc	31,31,0
518	add	31,31,6
519	add	7,7,31
520	add	8,8,28
521	add	9,9,29
522	add	10,10,30
523
524	srdi	28,7,32
525	add	8,8,28
526	srdi	29,8,32
527	add	9,9,29
528	srdi	30,9,32
529	add	10,10,30
530	srdi	31,10,32
531	add	11,11,31
532
533	insrdi	7,8,32,0
534	insrdi	9,10,32,0
535
536	addic	28,7,5
537	addze	29,9
538	addze	30,11
539
540	srdi	0,30,2
541	neg	0,0
542	sradi	0,0,63
543	ld	30,0(5)
544	ld	31,8(5)
545
546	andc	7,7,0
547	and	28,28,0
548	andc	9,9,0
549	and	29,29,0
550	or	7,7,28
551	or	9,9,29
552	rotldi	30,30,32
553	rotldi	31,31,32
554	addc	7,7,30
555	adde	9,9,31
556
557	srdi	8,7,32
558	srdi	10,9,32
559	li	29,4
560	stwbrx	7,0,4
561	li	30,8
562	stwbrx	8,29,4
563	li	31,12
564	stwbrx	9,30,4
565	stwbrx	10,31,4
566	ld	28,48(1)
567	ld	29,56(1)
568	ld	30,64(1)
569	ld	31,72(1)
570	addi	1,1,80
571	blr
572.long	0
573.byte	0,12,4,1,0x80,4,3,0
574
575.align	6
576.LPICmeup:
577	mflr	0
578	bcl	20,31,$+4
579	mflr	5
580	addi	5,5,56
581	mtlr	0
582	blr
583.long	0
584.byte	0,12,0x14,0,0,0,0,0
585.space	28
586
587.long	0x43300000,0x00000000
588.long	0x45300000,0x00000000
589.long	0x47300000,0x00000000
590.long	0x49300000,0x00000000
591.long	0x4b500000,0x00000000
592
593.long	0x37f40000,0x00000000
594
595.long	0x44300000,0x00000000
596.long	0x46300000,0x00000000
597.long	0x48300000,0x00000000
598.long	0x4a300000,0x00000000
599.long	0x3e300000,0x00000000
600.long	0x40300000,0x00000000
601.long	0x42300000,0x00000000
602
603.long	0x00000000,0x00000001
604.byte	80,111,108,121,49,51,48,53,32,102,111,114,32,80,80,67,32,70,80,85,44,32,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
605.align	2
606.align	4
607