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