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