1#if defined(__i386__)
2.text
3.globl	_bn_mul_comba8
4.private_extern	_bn_mul_comba8
5.align	4
6_bn_mul_comba8:
7L_bn_mul_comba8_begin:
8	pushl	%esi
9	movl	12(%esp),%esi
10	pushl	%edi
11	movl	20(%esp),%edi
12	pushl	%ebp
13	pushl	%ebx
14	xorl	%ebx,%ebx
15	movl	(%esi),%eax
16	xorl	%ecx,%ecx
17	movl	(%edi),%edx
18	# ################## Calculate word 0
19	xorl	%ebp,%ebp
20	# mul a[0]*b[0]
21	mull	%edx
22	addl	%eax,%ebx
23	movl	20(%esp),%eax
24	adcl	%edx,%ecx
25	movl	(%edi),%edx
26	adcl	$0,%ebp
27	movl	%ebx,(%eax)
28	movl	4(%esi),%eax
29	# saved r[0]
30	# ################## Calculate word 1
31	xorl	%ebx,%ebx
32	# mul a[1]*b[0]
33	mull	%edx
34	addl	%eax,%ecx
35	movl	(%esi),%eax
36	adcl	%edx,%ebp
37	movl	4(%edi),%edx
38	adcl	$0,%ebx
39	# mul a[0]*b[1]
40	mull	%edx
41	addl	%eax,%ecx
42	movl	20(%esp),%eax
43	adcl	%edx,%ebp
44	movl	(%edi),%edx
45	adcl	$0,%ebx
46	movl	%ecx,4(%eax)
47	movl	8(%esi),%eax
48	# saved r[1]
49	# ################## Calculate word 2
50	xorl	%ecx,%ecx
51	# mul a[2]*b[0]
52	mull	%edx
53	addl	%eax,%ebp
54	movl	4(%esi),%eax
55	adcl	%edx,%ebx
56	movl	4(%edi),%edx
57	adcl	$0,%ecx
58	# mul a[1]*b[1]
59	mull	%edx
60	addl	%eax,%ebp
61	movl	(%esi),%eax
62	adcl	%edx,%ebx
63	movl	8(%edi),%edx
64	adcl	$0,%ecx
65	# mul a[0]*b[2]
66	mull	%edx
67	addl	%eax,%ebp
68	movl	20(%esp),%eax
69	adcl	%edx,%ebx
70	movl	(%edi),%edx
71	adcl	$0,%ecx
72	movl	%ebp,8(%eax)
73	movl	12(%esi),%eax
74	# saved r[2]
75	# ################## Calculate word 3
76	xorl	%ebp,%ebp
77	# mul a[3]*b[0]
78	mull	%edx
79	addl	%eax,%ebx
80	movl	8(%esi),%eax
81	adcl	%edx,%ecx
82	movl	4(%edi),%edx
83	adcl	$0,%ebp
84	# mul a[2]*b[1]
85	mull	%edx
86	addl	%eax,%ebx
87	movl	4(%esi),%eax
88	adcl	%edx,%ecx
89	movl	8(%edi),%edx
90	adcl	$0,%ebp
91	# mul a[1]*b[2]
92	mull	%edx
93	addl	%eax,%ebx
94	movl	(%esi),%eax
95	adcl	%edx,%ecx
96	movl	12(%edi),%edx
97	adcl	$0,%ebp
98	# mul a[0]*b[3]
99	mull	%edx
100	addl	%eax,%ebx
101	movl	20(%esp),%eax
102	adcl	%edx,%ecx
103	movl	(%edi),%edx
104	adcl	$0,%ebp
105	movl	%ebx,12(%eax)
106	movl	16(%esi),%eax
107	# saved r[3]
108	# ################## Calculate word 4
109	xorl	%ebx,%ebx
110	# mul a[4]*b[0]
111	mull	%edx
112	addl	%eax,%ecx
113	movl	12(%esi),%eax
114	adcl	%edx,%ebp
115	movl	4(%edi),%edx
116	adcl	$0,%ebx
117	# mul a[3]*b[1]
118	mull	%edx
119	addl	%eax,%ecx
120	movl	8(%esi),%eax
121	adcl	%edx,%ebp
122	movl	8(%edi),%edx
123	adcl	$0,%ebx
124	# mul a[2]*b[2]
125	mull	%edx
126	addl	%eax,%ecx
127	movl	4(%esi),%eax
128	adcl	%edx,%ebp
129	movl	12(%edi),%edx
130	adcl	$0,%ebx
131	# mul a[1]*b[3]
132	mull	%edx
133	addl	%eax,%ecx
134	movl	(%esi),%eax
135	adcl	%edx,%ebp
136	movl	16(%edi),%edx
137	adcl	$0,%ebx
138	# mul a[0]*b[4]
139	mull	%edx
140	addl	%eax,%ecx
141	movl	20(%esp),%eax
142	adcl	%edx,%ebp
143	movl	(%edi),%edx
144	adcl	$0,%ebx
145	movl	%ecx,16(%eax)
146	movl	20(%esi),%eax
147	# saved r[4]
148	# ################## Calculate word 5
149	xorl	%ecx,%ecx
150	# mul a[5]*b[0]
151	mull	%edx
152	addl	%eax,%ebp
153	movl	16(%esi),%eax
154	adcl	%edx,%ebx
155	movl	4(%edi),%edx
156	adcl	$0,%ecx
157	# mul a[4]*b[1]
158	mull	%edx
159	addl	%eax,%ebp
160	movl	12(%esi),%eax
161	adcl	%edx,%ebx
162	movl	8(%edi),%edx
163	adcl	$0,%ecx
164	# mul a[3]*b[2]
165	mull	%edx
166	addl	%eax,%ebp
167	movl	8(%esi),%eax
168	adcl	%edx,%ebx
169	movl	12(%edi),%edx
170	adcl	$0,%ecx
171	# mul a[2]*b[3]
172	mull	%edx
173	addl	%eax,%ebp
174	movl	4(%esi),%eax
175	adcl	%edx,%ebx
176	movl	16(%edi),%edx
177	adcl	$0,%ecx
178	# mul a[1]*b[4]
179	mull	%edx
180	addl	%eax,%ebp
181	movl	(%esi),%eax
182	adcl	%edx,%ebx
183	movl	20(%edi),%edx
184	adcl	$0,%ecx
185	# mul a[0]*b[5]
186	mull	%edx
187	addl	%eax,%ebp
188	movl	20(%esp),%eax
189	adcl	%edx,%ebx
190	movl	(%edi),%edx
191	adcl	$0,%ecx
192	movl	%ebp,20(%eax)
193	movl	24(%esi),%eax
194	# saved r[5]
195	# ################## Calculate word 6
196	xorl	%ebp,%ebp
197	# mul a[6]*b[0]
198	mull	%edx
199	addl	%eax,%ebx
200	movl	20(%esi),%eax
201	adcl	%edx,%ecx
202	movl	4(%edi),%edx
203	adcl	$0,%ebp
204	# mul a[5]*b[1]
205	mull	%edx
206	addl	%eax,%ebx
207	movl	16(%esi),%eax
208	adcl	%edx,%ecx
209	movl	8(%edi),%edx
210	adcl	$0,%ebp
211	# mul a[4]*b[2]
212	mull	%edx
213	addl	%eax,%ebx
214	movl	12(%esi),%eax
215	adcl	%edx,%ecx
216	movl	12(%edi),%edx
217	adcl	$0,%ebp
218	# mul a[3]*b[3]
219	mull	%edx
220	addl	%eax,%ebx
221	movl	8(%esi),%eax
222	adcl	%edx,%ecx
223	movl	16(%edi),%edx
224	adcl	$0,%ebp
225	# mul a[2]*b[4]
226	mull	%edx
227	addl	%eax,%ebx
228	movl	4(%esi),%eax
229	adcl	%edx,%ecx
230	movl	20(%edi),%edx
231	adcl	$0,%ebp
232	# mul a[1]*b[5]
233	mull	%edx
234	addl	%eax,%ebx
235	movl	(%esi),%eax
236	adcl	%edx,%ecx
237	movl	24(%edi),%edx
238	adcl	$0,%ebp
239	# mul a[0]*b[6]
240	mull	%edx
241	addl	%eax,%ebx
242	movl	20(%esp),%eax
243	adcl	%edx,%ecx
244	movl	(%edi),%edx
245	adcl	$0,%ebp
246	movl	%ebx,24(%eax)
247	movl	28(%esi),%eax
248	# saved r[6]
249	# ################## Calculate word 7
250	xorl	%ebx,%ebx
251	# mul a[7]*b[0]
252	mull	%edx
253	addl	%eax,%ecx
254	movl	24(%esi),%eax
255	adcl	%edx,%ebp
256	movl	4(%edi),%edx
257	adcl	$0,%ebx
258	# mul a[6]*b[1]
259	mull	%edx
260	addl	%eax,%ecx
261	movl	20(%esi),%eax
262	adcl	%edx,%ebp
263	movl	8(%edi),%edx
264	adcl	$0,%ebx
265	# mul a[5]*b[2]
266	mull	%edx
267	addl	%eax,%ecx
268	movl	16(%esi),%eax
269	adcl	%edx,%ebp
270	movl	12(%edi),%edx
271	adcl	$0,%ebx
272	# mul a[4]*b[3]
273	mull	%edx
274	addl	%eax,%ecx
275	movl	12(%esi),%eax
276	adcl	%edx,%ebp
277	movl	16(%edi),%edx
278	adcl	$0,%ebx
279	# mul a[3]*b[4]
280	mull	%edx
281	addl	%eax,%ecx
282	movl	8(%esi),%eax
283	adcl	%edx,%ebp
284	movl	20(%edi),%edx
285	adcl	$0,%ebx
286	# mul a[2]*b[5]
287	mull	%edx
288	addl	%eax,%ecx
289	movl	4(%esi),%eax
290	adcl	%edx,%ebp
291	movl	24(%edi),%edx
292	adcl	$0,%ebx
293	# mul a[1]*b[6]
294	mull	%edx
295	addl	%eax,%ecx
296	movl	(%esi),%eax
297	adcl	%edx,%ebp
298	movl	28(%edi),%edx
299	adcl	$0,%ebx
300	# mul a[0]*b[7]
301	mull	%edx
302	addl	%eax,%ecx
303	movl	20(%esp),%eax
304	adcl	%edx,%ebp
305	movl	4(%edi),%edx
306	adcl	$0,%ebx
307	movl	%ecx,28(%eax)
308	movl	28(%esi),%eax
309	# saved r[7]
310	# ################## Calculate word 8
311	xorl	%ecx,%ecx
312	# mul a[7]*b[1]
313	mull	%edx
314	addl	%eax,%ebp
315	movl	24(%esi),%eax
316	adcl	%edx,%ebx
317	movl	8(%edi),%edx
318	adcl	$0,%ecx
319	# mul a[6]*b[2]
320	mull	%edx
321	addl	%eax,%ebp
322	movl	20(%esi),%eax
323	adcl	%edx,%ebx
324	movl	12(%edi),%edx
325	adcl	$0,%ecx
326	# mul a[5]*b[3]
327	mull	%edx
328	addl	%eax,%ebp
329	movl	16(%esi),%eax
330	adcl	%edx,%ebx
331	movl	16(%edi),%edx
332	adcl	$0,%ecx
333	# mul a[4]*b[4]
334	mull	%edx
335	addl	%eax,%ebp
336	movl	12(%esi),%eax
337	adcl	%edx,%ebx
338	movl	20(%edi),%edx
339	adcl	$0,%ecx
340	# mul a[3]*b[5]
341	mull	%edx
342	addl	%eax,%ebp
343	movl	8(%esi),%eax
344	adcl	%edx,%ebx
345	movl	24(%edi),%edx
346	adcl	$0,%ecx
347	# mul a[2]*b[6]
348	mull	%edx
349	addl	%eax,%ebp
350	movl	4(%esi),%eax
351	adcl	%edx,%ebx
352	movl	28(%edi),%edx
353	adcl	$0,%ecx
354	# mul a[1]*b[7]
355	mull	%edx
356	addl	%eax,%ebp
357	movl	20(%esp),%eax
358	adcl	%edx,%ebx
359	movl	8(%edi),%edx
360	adcl	$0,%ecx
361	movl	%ebp,32(%eax)
362	movl	28(%esi),%eax
363	# saved r[8]
364	# ################## Calculate word 9
365	xorl	%ebp,%ebp
366	# mul a[7]*b[2]
367	mull	%edx
368	addl	%eax,%ebx
369	movl	24(%esi),%eax
370	adcl	%edx,%ecx
371	movl	12(%edi),%edx
372	adcl	$0,%ebp
373	# mul a[6]*b[3]
374	mull	%edx
375	addl	%eax,%ebx
376	movl	20(%esi),%eax
377	adcl	%edx,%ecx
378	movl	16(%edi),%edx
379	adcl	$0,%ebp
380	# mul a[5]*b[4]
381	mull	%edx
382	addl	%eax,%ebx
383	movl	16(%esi),%eax
384	adcl	%edx,%ecx
385	movl	20(%edi),%edx
386	adcl	$0,%ebp
387	# mul a[4]*b[5]
388	mull	%edx
389	addl	%eax,%ebx
390	movl	12(%esi),%eax
391	adcl	%edx,%ecx
392	movl	24(%edi),%edx
393	adcl	$0,%ebp
394	# mul a[3]*b[6]
395	mull	%edx
396	addl	%eax,%ebx
397	movl	8(%esi),%eax
398	adcl	%edx,%ecx
399	movl	28(%edi),%edx
400	adcl	$0,%ebp
401	# mul a[2]*b[7]
402	mull	%edx
403	addl	%eax,%ebx
404	movl	20(%esp),%eax
405	adcl	%edx,%ecx
406	movl	12(%edi),%edx
407	adcl	$0,%ebp
408	movl	%ebx,36(%eax)
409	movl	28(%esi),%eax
410	# saved r[9]
411	# ################## Calculate word 10
412	xorl	%ebx,%ebx
413	# mul a[7]*b[3]
414	mull	%edx
415	addl	%eax,%ecx
416	movl	24(%esi),%eax
417	adcl	%edx,%ebp
418	movl	16(%edi),%edx
419	adcl	$0,%ebx
420	# mul a[6]*b[4]
421	mull	%edx
422	addl	%eax,%ecx
423	movl	20(%esi),%eax
424	adcl	%edx,%ebp
425	movl	20(%edi),%edx
426	adcl	$0,%ebx
427	# mul a[5]*b[5]
428	mull	%edx
429	addl	%eax,%ecx
430	movl	16(%esi),%eax
431	adcl	%edx,%ebp
432	movl	24(%edi),%edx
433	adcl	$0,%ebx
434	# mul a[4]*b[6]
435	mull	%edx
436	addl	%eax,%ecx
437	movl	12(%esi),%eax
438	adcl	%edx,%ebp
439	movl	28(%edi),%edx
440	adcl	$0,%ebx
441	# mul a[3]*b[7]
442	mull	%edx
443	addl	%eax,%ecx
444	movl	20(%esp),%eax
445	adcl	%edx,%ebp
446	movl	16(%edi),%edx
447	adcl	$0,%ebx
448	movl	%ecx,40(%eax)
449	movl	28(%esi),%eax
450	# saved r[10]
451	# ################## Calculate word 11
452	xorl	%ecx,%ecx
453	# mul a[7]*b[4]
454	mull	%edx
455	addl	%eax,%ebp
456	movl	24(%esi),%eax
457	adcl	%edx,%ebx
458	movl	20(%edi),%edx
459	adcl	$0,%ecx
460	# mul a[6]*b[5]
461	mull	%edx
462	addl	%eax,%ebp
463	movl	20(%esi),%eax
464	adcl	%edx,%ebx
465	movl	24(%edi),%edx
466	adcl	$0,%ecx
467	# mul a[5]*b[6]
468	mull	%edx
469	addl	%eax,%ebp
470	movl	16(%esi),%eax
471	adcl	%edx,%ebx
472	movl	28(%edi),%edx
473	adcl	$0,%ecx
474	# mul a[4]*b[7]
475	mull	%edx
476	addl	%eax,%ebp
477	movl	20(%esp),%eax
478	adcl	%edx,%ebx
479	movl	20(%edi),%edx
480	adcl	$0,%ecx
481	movl	%ebp,44(%eax)
482	movl	28(%esi),%eax
483	# saved r[11]
484	# ################## Calculate word 12
485	xorl	%ebp,%ebp
486	# mul a[7]*b[5]
487	mull	%edx
488	addl	%eax,%ebx
489	movl	24(%esi),%eax
490	adcl	%edx,%ecx
491	movl	24(%edi),%edx
492	adcl	$0,%ebp
493	# mul a[6]*b[6]
494	mull	%edx
495	addl	%eax,%ebx
496	movl	20(%esi),%eax
497	adcl	%edx,%ecx
498	movl	28(%edi),%edx
499	adcl	$0,%ebp
500	# mul a[5]*b[7]
501	mull	%edx
502	addl	%eax,%ebx
503	movl	20(%esp),%eax
504	adcl	%edx,%ecx
505	movl	24(%edi),%edx
506	adcl	$0,%ebp
507	movl	%ebx,48(%eax)
508	movl	28(%esi),%eax
509	# saved r[12]
510	# ################## Calculate word 13
511	xorl	%ebx,%ebx
512	# mul a[7]*b[6]
513	mull	%edx
514	addl	%eax,%ecx
515	movl	24(%esi),%eax
516	adcl	%edx,%ebp
517	movl	28(%edi),%edx
518	adcl	$0,%ebx
519	# mul a[6]*b[7]
520	mull	%edx
521	addl	%eax,%ecx
522	movl	20(%esp),%eax
523	adcl	%edx,%ebp
524	movl	28(%edi),%edx
525	adcl	$0,%ebx
526	movl	%ecx,52(%eax)
527	movl	28(%esi),%eax
528	# saved r[13]
529	# ################## Calculate word 14
530	xorl	%ecx,%ecx
531	# mul a[7]*b[7]
532	mull	%edx
533	addl	%eax,%ebp
534	movl	20(%esp),%eax
535	adcl	%edx,%ebx
536	adcl	$0,%ecx
537	movl	%ebp,56(%eax)
538	# saved r[14]
539	# save r[15]
540	movl	%ebx,60(%eax)
541	popl	%ebx
542	popl	%ebp
543	popl	%edi
544	popl	%esi
545	ret
546.globl	_bn_mul_comba4
547.private_extern	_bn_mul_comba4
548.align	4
549_bn_mul_comba4:
550L_bn_mul_comba4_begin:
551	pushl	%esi
552	movl	12(%esp),%esi
553	pushl	%edi
554	movl	20(%esp),%edi
555	pushl	%ebp
556	pushl	%ebx
557	xorl	%ebx,%ebx
558	movl	(%esi),%eax
559	xorl	%ecx,%ecx
560	movl	(%edi),%edx
561	# ################## Calculate word 0
562	xorl	%ebp,%ebp
563	# mul a[0]*b[0]
564	mull	%edx
565	addl	%eax,%ebx
566	movl	20(%esp),%eax
567	adcl	%edx,%ecx
568	movl	(%edi),%edx
569	adcl	$0,%ebp
570	movl	%ebx,(%eax)
571	movl	4(%esi),%eax
572	# saved r[0]
573	# ################## Calculate word 1
574	xorl	%ebx,%ebx
575	# mul a[1]*b[0]
576	mull	%edx
577	addl	%eax,%ecx
578	movl	(%esi),%eax
579	adcl	%edx,%ebp
580	movl	4(%edi),%edx
581	adcl	$0,%ebx
582	# mul a[0]*b[1]
583	mull	%edx
584	addl	%eax,%ecx
585	movl	20(%esp),%eax
586	adcl	%edx,%ebp
587	movl	(%edi),%edx
588	adcl	$0,%ebx
589	movl	%ecx,4(%eax)
590	movl	8(%esi),%eax
591	# saved r[1]
592	# ################## Calculate word 2
593	xorl	%ecx,%ecx
594	# mul a[2]*b[0]
595	mull	%edx
596	addl	%eax,%ebp
597	movl	4(%esi),%eax
598	adcl	%edx,%ebx
599	movl	4(%edi),%edx
600	adcl	$0,%ecx
601	# mul a[1]*b[1]
602	mull	%edx
603	addl	%eax,%ebp
604	movl	(%esi),%eax
605	adcl	%edx,%ebx
606	movl	8(%edi),%edx
607	adcl	$0,%ecx
608	# mul a[0]*b[2]
609	mull	%edx
610	addl	%eax,%ebp
611	movl	20(%esp),%eax
612	adcl	%edx,%ebx
613	movl	(%edi),%edx
614	adcl	$0,%ecx
615	movl	%ebp,8(%eax)
616	movl	12(%esi),%eax
617	# saved r[2]
618	# ################## Calculate word 3
619	xorl	%ebp,%ebp
620	# mul a[3]*b[0]
621	mull	%edx
622	addl	%eax,%ebx
623	movl	8(%esi),%eax
624	adcl	%edx,%ecx
625	movl	4(%edi),%edx
626	adcl	$0,%ebp
627	# mul a[2]*b[1]
628	mull	%edx
629	addl	%eax,%ebx
630	movl	4(%esi),%eax
631	adcl	%edx,%ecx
632	movl	8(%edi),%edx
633	adcl	$0,%ebp
634	# mul a[1]*b[2]
635	mull	%edx
636	addl	%eax,%ebx
637	movl	(%esi),%eax
638	adcl	%edx,%ecx
639	movl	12(%edi),%edx
640	adcl	$0,%ebp
641	# mul a[0]*b[3]
642	mull	%edx
643	addl	%eax,%ebx
644	movl	20(%esp),%eax
645	adcl	%edx,%ecx
646	movl	4(%edi),%edx
647	adcl	$0,%ebp
648	movl	%ebx,12(%eax)
649	movl	12(%esi),%eax
650	# saved r[3]
651	# ################## Calculate word 4
652	xorl	%ebx,%ebx
653	# mul a[3]*b[1]
654	mull	%edx
655	addl	%eax,%ecx
656	movl	8(%esi),%eax
657	adcl	%edx,%ebp
658	movl	8(%edi),%edx
659	adcl	$0,%ebx
660	# mul a[2]*b[2]
661	mull	%edx
662	addl	%eax,%ecx
663	movl	4(%esi),%eax
664	adcl	%edx,%ebp
665	movl	12(%edi),%edx
666	adcl	$0,%ebx
667	# mul a[1]*b[3]
668	mull	%edx
669	addl	%eax,%ecx
670	movl	20(%esp),%eax
671	adcl	%edx,%ebp
672	movl	8(%edi),%edx
673	adcl	$0,%ebx
674	movl	%ecx,16(%eax)
675	movl	12(%esi),%eax
676	# saved r[4]
677	# ################## Calculate word 5
678	xorl	%ecx,%ecx
679	# mul a[3]*b[2]
680	mull	%edx
681	addl	%eax,%ebp
682	movl	8(%esi),%eax
683	adcl	%edx,%ebx
684	movl	12(%edi),%edx
685	adcl	$0,%ecx
686	# mul a[2]*b[3]
687	mull	%edx
688	addl	%eax,%ebp
689	movl	20(%esp),%eax
690	adcl	%edx,%ebx
691	movl	12(%edi),%edx
692	adcl	$0,%ecx
693	movl	%ebp,20(%eax)
694	movl	12(%esi),%eax
695	# saved r[5]
696	# ################## Calculate word 6
697	xorl	%ebp,%ebp
698	# mul a[3]*b[3]
699	mull	%edx
700	addl	%eax,%ebx
701	movl	20(%esp),%eax
702	adcl	%edx,%ecx
703	adcl	$0,%ebp
704	movl	%ebx,24(%eax)
705	# saved r[6]
706	# save r[7]
707	movl	%ecx,28(%eax)
708	popl	%ebx
709	popl	%ebp
710	popl	%edi
711	popl	%esi
712	ret
713.globl	_bn_sqr_comba8
714.private_extern	_bn_sqr_comba8
715.align	4
716_bn_sqr_comba8:
717L_bn_sqr_comba8_begin:
718	pushl	%esi
719	pushl	%edi
720	pushl	%ebp
721	pushl	%ebx
722	movl	20(%esp),%edi
723	movl	24(%esp),%esi
724	xorl	%ebx,%ebx
725	xorl	%ecx,%ecx
726	movl	(%esi),%eax
727	# ############### Calculate word 0
728	xorl	%ebp,%ebp
729	# sqr a[0]*a[0]
730	mull	%eax
731	addl	%eax,%ebx
732	adcl	%edx,%ecx
733	movl	(%esi),%edx
734	adcl	$0,%ebp
735	movl	%ebx,(%edi)
736	movl	4(%esi),%eax
737	# saved r[0]
738	# ############### Calculate word 1
739	xorl	%ebx,%ebx
740	# sqr a[1]*a[0]
741	mull	%edx
742	addl	%eax,%eax
743	adcl	%edx,%edx
744	adcl	$0,%ebx
745	addl	%eax,%ecx
746	adcl	%edx,%ebp
747	movl	8(%esi),%eax
748	adcl	$0,%ebx
749	movl	%ecx,4(%edi)
750	movl	(%esi),%edx
751	# saved r[1]
752	# ############### Calculate word 2
753	xorl	%ecx,%ecx
754	# sqr a[2]*a[0]
755	mull	%edx
756	addl	%eax,%eax
757	adcl	%edx,%edx
758	adcl	$0,%ecx
759	addl	%eax,%ebp
760	adcl	%edx,%ebx
761	movl	4(%esi),%eax
762	adcl	$0,%ecx
763	# sqr a[1]*a[1]
764	mull	%eax
765	addl	%eax,%ebp
766	adcl	%edx,%ebx
767	movl	(%esi),%edx
768	adcl	$0,%ecx
769	movl	%ebp,8(%edi)
770	movl	12(%esi),%eax
771	# saved r[2]
772	# ############### Calculate word 3
773	xorl	%ebp,%ebp
774	# sqr a[3]*a[0]
775	mull	%edx
776	addl	%eax,%eax
777	adcl	%edx,%edx
778	adcl	$0,%ebp
779	addl	%eax,%ebx
780	adcl	%edx,%ecx
781	movl	8(%esi),%eax
782	adcl	$0,%ebp
783	movl	4(%esi),%edx
784	# sqr a[2]*a[1]
785	mull	%edx
786	addl	%eax,%eax
787	adcl	%edx,%edx
788	adcl	$0,%ebp
789	addl	%eax,%ebx
790	adcl	%edx,%ecx
791	movl	16(%esi),%eax
792	adcl	$0,%ebp
793	movl	%ebx,12(%edi)
794	movl	(%esi),%edx
795	# saved r[3]
796	# ############### Calculate word 4
797	xorl	%ebx,%ebx
798	# sqr a[4]*a[0]
799	mull	%edx
800	addl	%eax,%eax
801	adcl	%edx,%edx
802	adcl	$0,%ebx
803	addl	%eax,%ecx
804	adcl	%edx,%ebp
805	movl	12(%esi),%eax
806	adcl	$0,%ebx
807	movl	4(%esi),%edx
808	# sqr a[3]*a[1]
809	mull	%edx
810	addl	%eax,%eax
811	adcl	%edx,%edx
812	adcl	$0,%ebx
813	addl	%eax,%ecx
814	adcl	%edx,%ebp
815	movl	8(%esi),%eax
816	adcl	$0,%ebx
817	# sqr a[2]*a[2]
818	mull	%eax
819	addl	%eax,%ecx
820	adcl	%edx,%ebp
821	movl	(%esi),%edx
822	adcl	$0,%ebx
823	movl	%ecx,16(%edi)
824	movl	20(%esi),%eax
825	# saved r[4]
826	# ############### Calculate word 5
827	xorl	%ecx,%ecx
828	# sqr a[5]*a[0]
829	mull	%edx
830	addl	%eax,%eax
831	adcl	%edx,%edx
832	adcl	$0,%ecx
833	addl	%eax,%ebp
834	adcl	%edx,%ebx
835	movl	16(%esi),%eax
836	adcl	$0,%ecx
837	movl	4(%esi),%edx
838	# sqr a[4]*a[1]
839	mull	%edx
840	addl	%eax,%eax
841	adcl	%edx,%edx
842	adcl	$0,%ecx
843	addl	%eax,%ebp
844	adcl	%edx,%ebx
845	movl	12(%esi),%eax
846	adcl	$0,%ecx
847	movl	8(%esi),%edx
848	# sqr a[3]*a[2]
849	mull	%edx
850	addl	%eax,%eax
851	adcl	%edx,%edx
852	adcl	$0,%ecx
853	addl	%eax,%ebp
854	adcl	%edx,%ebx
855	movl	24(%esi),%eax
856	adcl	$0,%ecx
857	movl	%ebp,20(%edi)
858	movl	(%esi),%edx
859	# saved r[5]
860	# ############### Calculate word 6
861	xorl	%ebp,%ebp
862	# sqr a[6]*a[0]
863	mull	%edx
864	addl	%eax,%eax
865	adcl	%edx,%edx
866	adcl	$0,%ebp
867	addl	%eax,%ebx
868	adcl	%edx,%ecx
869	movl	20(%esi),%eax
870	adcl	$0,%ebp
871	movl	4(%esi),%edx
872	# sqr a[5]*a[1]
873	mull	%edx
874	addl	%eax,%eax
875	adcl	%edx,%edx
876	adcl	$0,%ebp
877	addl	%eax,%ebx
878	adcl	%edx,%ecx
879	movl	16(%esi),%eax
880	adcl	$0,%ebp
881	movl	8(%esi),%edx
882	# sqr a[4]*a[2]
883	mull	%edx
884	addl	%eax,%eax
885	adcl	%edx,%edx
886	adcl	$0,%ebp
887	addl	%eax,%ebx
888	adcl	%edx,%ecx
889	movl	12(%esi),%eax
890	adcl	$0,%ebp
891	# sqr a[3]*a[3]
892	mull	%eax
893	addl	%eax,%ebx
894	adcl	%edx,%ecx
895	movl	(%esi),%edx
896	adcl	$0,%ebp
897	movl	%ebx,24(%edi)
898	movl	28(%esi),%eax
899	# saved r[6]
900	# ############### Calculate word 7
901	xorl	%ebx,%ebx
902	# sqr a[7]*a[0]
903	mull	%edx
904	addl	%eax,%eax
905	adcl	%edx,%edx
906	adcl	$0,%ebx
907	addl	%eax,%ecx
908	adcl	%edx,%ebp
909	movl	24(%esi),%eax
910	adcl	$0,%ebx
911	movl	4(%esi),%edx
912	# sqr a[6]*a[1]
913	mull	%edx
914	addl	%eax,%eax
915	adcl	%edx,%edx
916	adcl	$0,%ebx
917	addl	%eax,%ecx
918	adcl	%edx,%ebp
919	movl	20(%esi),%eax
920	adcl	$0,%ebx
921	movl	8(%esi),%edx
922	# sqr a[5]*a[2]
923	mull	%edx
924	addl	%eax,%eax
925	adcl	%edx,%edx
926	adcl	$0,%ebx
927	addl	%eax,%ecx
928	adcl	%edx,%ebp
929	movl	16(%esi),%eax
930	adcl	$0,%ebx
931	movl	12(%esi),%edx
932	# sqr a[4]*a[3]
933	mull	%edx
934	addl	%eax,%eax
935	adcl	%edx,%edx
936	adcl	$0,%ebx
937	addl	%eax,%ecx
938	adcl	%edx,%ebp
939	movl	28(%esi),%eax
940	adcl	$0,%ebx
941	movl	%ecx,28(%edi)
942	movl	4(%esi),%edx
943	# saved r[7]
944	# ############### Calculate word 8
945	xorl	%ecx,%ecx
946	# sqr a[7]*a[1]
947	mull	%edx
948	addl	%eax,%eax
949	adcl	%edx,%edx
950	adcl	$0,%ecx
951	addl	%eax,%ebp
952	adcl	%edx,%ebx
953	movl	24(%esi),%eax
954	adcl	$0,%ecx
955	movl	8(%esi),%edx
956	# sqr a[6]*a[2]
957	mull	%edx
958	addl	%eax,%eax
959	adcl	%edx,%edx
960	adcl	$0,%ecx
961	addl	%eax,%ebp
962	adcl	%edx,%ebx
963	movl	20(%esi),%eax
964	adcl	$0,%ecx
965	movl	12(%esi),%edx
966	# sqr a[5]*a[3]
967	mull	%edx
968	addl	%eax,%eax
969	adcl	%edx,%edx
970	adcl	$0,%ecx
971	addl	%eax,%ebp
972	adcl	%edx,%ebx
973	movl	16(%esi),%eax
974	adcl	$0,%ecx
975	# sqr a[4]*a[4]
976	mull	%eax
977	addl	%eax,%ebp
978	adcl	%edx,%ebx
979	movl	8(%esi),%edx
980	adcl	$0,%ecx
981	movl	%ebp,32(%edi)
982	movl	28(%esi),%eax
983	# saved r[8]
984	# ############### Calculate word 9
985	xorl	%ebp,%ebp
986	# sqr a[7]*a[2]
987	mull	%edx
988	addl	%eax,%eax
989	adcl	%edx,%edx
990	adcl	$0,%ebp
991	addl	%eax,%ebx
992	adcl	%edx,%ecx
993	movl	24(%esi),%eax
994	adcl	$0,%ebp
995	movl	12(%esi),%edx
996	# sqr a[6]*a[3]
997	mull	%edx
998	addl	%eax,%eax
999	adcl	%edx,%edx
1000	adcl	$0,%ebp
1001	addl	%eax,%ebx
1002	adcl	%edx,%ecx
1003	movl	20(%esi),%eax
1004	adcl	$0,%ebp
1005	movl	16(%esi),%edx
1006	# sqr a[5]*a[4]
1007	mull	%edx
1008	addl	%eax,%eax
1009	adcl	%edx,%edx
1010	adcl	$0,%ebp
1011	addl	%eax,%ebx
1012	adcl	%edx,%ecx
1013	movl	28(%esi),%eax
1014	adcl	$0,%ebp
1015	movl	%ebx,36(%edi)
1016	movl	12(%esi),%edx
1017	# saved r[9]
1018	# ############### Calculate word 10
1019	xorl	%ebx,%ebx
1020	# sqr a[7]*a[3]
1021	mull	%edx
1022	addl	%eax,%eax
1023	adcl	%edx,%edx
1024	adcl	$0,%ebx
1025	addl	%eax,%ecx
1026	adcl	%edx,%ebp
1027	movl	24(%esi),%eax
1028	adcl	$0,%ebx
1029	movl	16(%esi),%edx
1030	# sqr a[6]*a[4]
1031	mull	%edx
1032	addl	%eax,%eax
1033	adcl	%edx,%edx
1034	adcl	$0,%ebx
1035	addl	%eax,%ecx
1036	adcl	%edx,%ebp
1037	movl	20(%esi),%eax
1038	adcl	$0,%ebx
1039	# sqr a[5]*a[5]
1040	mull	%eax
1041	addl	%eax,%ecx
1042	adcl	%edx,%ebp
1043	movl	16(%esi),%edx
1044	adcl	$0,%ebx
1045	movl	%ecx,40(%edi)
1046	movl	28(%esi),%eax
1047	# saved r[10]
1048	# ############### Calculate word 11
1049	xorl	%ecx,%ecx
1050	# sqr a[7]*a[4]
1051	mull	%edx
1052	addl	%eax,%eax
1053	adcl	%edx,%edx
1054	adcl	$0,%ecx
1055	addl	%eax,%ebp
1056	adcl	%edx,%ebx
1057	movl	24(%esi),%eax
1058	adcl	$0,%ecx
1059	movl	20(%esi),%edx
1060	# sqr a[6]*a[5]
1061	mull	%edx
1062	addl	%eax,%eax
1063	adcl	%edx,%edx
1064	adcl	$0,%ecx
1065	addl	%eax,%ebp
1066	adcl	%edx,%ebx
1067	movl	28(%esi),%eax
1068	adcl	$0,%ecx
1069	movl	%ebp,44(%edi)
1070	movl	20(%esi),%edx
1071	# saved r[11]
1072	# ############### Calculate word 12
1073	xorl	%ebp,%ebp
1074	# sqr a[7]*a[5]
1075	mull	%edx
1076	addl	%eax,%eax
1077	adcl	%edx,%edx
1078	adcl	$0,%ebp
1079	addl	%eax,%ebx
1080	adcl	%edx,%ecx
1081	movl	24(%esi),%eax
1082	adcl	$0,%ebp
1083	# sqr a[6]*a[6]
1084	mull	%eax
1085	addl	%eax,%ebx
1086	adcl	%edx,%ecx
1087	movl	24(%esi),%edx
1088	adcl	$0,%ebp
1089	movl	%ebx,48(%edi)
1090	movl	28(%esi),%eax
1091	# saved r[12]
1092	# ############### Calculate word 13
1093	xorl	%ebx,%ebx
1094	# sqr a[7]*a[6]
1095	mull	%edx
1096	addl	%eax,%eax
1097	adcl	%edx,%edx
1098	adcl	$0,%ebx
1099	addl	%eax,%ecx
1100	adcl	%edx,%ebp
1101	movl	28(%esi),%eax
1102	adcl	$0,%ebx
1103	movl	%ecx,52(%edi)
1104	# saved r[13]
1105	# ############### Calculate word 14
1106	xorl	%ecx,%ecx
1107	# sqr a[7]*a[7]
1108	mull	%eax
1109	addl	%eax,%ebp
1110	adcl	%edx,%ebx
1111	adcl	$0,%ecx
1112	movl	%ebp,56(%edi)
1113	# saved r[14]
1114	movl	%ebx,60(%edi)
1115	popl	%ebx
1116	popl	%ebp
1117	popl	%edi
1118	popl	%esi
1119	ret
1120.globl	_bn_sqr_comba4
1121.private_extern	_bn_sqr_comba4
1122.align	4
1123_bn_sqr_comba4:
1124L_bn_sqr_comba4_begin:
1125	pushl	%esi
1126	pushl	%edi
1127	pushl	%ebp
1128	pushl	%ebx
1129	movl	20(%esp),%edi
1130	movl	24(%esp),%esi
1131	xorl	%ebx,%ebx
1132	xorl	%ecx,%ecx
1133	movl	(%esi),%eax
1134	# ############### Calculate word 0
1135	xorl	%ebp,%ebp
1136	# sqr a[0]*a[0]
1137	mull	%eax
1138	addl	%eax,%ebx
1139	adcl	%edx,%ecx
1140	movl	(%esi),%edx
1141	adcl	$0,%ebp
1142	movl	%ebx,(%edi)
1143	movl	4(%esi),%eax
1144	# saved r[0]
1145	# ############### Calculate word 1
1146	xorl	%ebx,%ebx
1147	# sqr a[1]*a[0]
1148	mull	%edx
1149	addl	%eax,%eax
1150	adcl	%edx,%edx
1151	adcl	$0,%ebx
1152	addl	%eax,%ecx
1153	adcl	%edx,%ebp
1154	movl	8(%esi),%eax
1155	adcl	$0,%ebx
1156	movl	%ecx,4(%edi)
1157	movl	(%esi),%edx
1158	# saved r[1]
1159	# ############### Calculate word 2
1160	xorl	%ecx,%ecx
1161	# sqr a[2]*a[0]
1162	mull	%edx
1163	addl	%eax,%eax
1164	adcl	%edx,%edx
1165	adcl	$0,%ecx
1166	addl	%eax,%ebp
1167	adcl	%edx,%ebx
1168	movl	4(%esi),%eax
1169	adcl	$0,%ecx
1170	# sqr a[1]*a[1]
1171	mull	%eax
1172	addl	%eax,%ebp
1173	adcl	%edx,%ebx
1174	movl	(%esi),%edx
1175	adcl	$0,%ecx
1176	movl	%ebp,8(%edi)
1177	movl	12(%esi),%eax
1178	# saved r[2]
1179	# ############### Calculate word 3
1180	xorl	%ebp,%ebp
1181	# sqr a[3]*a[0]
1182	mull	%edx
1183	addl	%eax,%eax
1184	adcl	%edx,%edx
1185	adcl	$0,%ebp
1186	addl	%eax,%ebx
1187	adcl	%edx,%ecx
1188	movl	8(%esi),%eax
1189	adcl	$0,%ebp
1190	movl	4(%esi),%edx
1191	# sqr a[2]*a[1]
1192	mull	%edx
1193	addl	%eax,%eax
1194	adcl	%edx,%edx
1195	adcl	$0,%ebp
1196	addl	%eax,%ebx
1197	adcl	%edx,%ecx
1198	movl	12(%esi),%eax
1199	adcl	$0,%ebp
1200	movl	%ebx,12(%edi)
1201	movl	4(%esi),%edx
1202	# saved r[3]
1203	# ############### Calculate word 4
1204	xorl	%ebx,%ebx
1205	# sqr a[3]*a[1]
1206	mull	%edx
1207	addl	%eax,%eax
1208	adcl	%edx,%edx
1209	adcl	$0,%ebx
1210	addl	%eax,%ecx
1211	adcl	%edx,%ebp
1212	movl	8(%esi),%eax
1213	adcl	$0,%ebx
1214	# sqr a[2]*a[2]
1215	mull	%eax
1216	addl	%eax,%ecx
1217	adcl	%edx,%ebp
1218	movl	8(%esi),%edx
1219	adcl	$0,%ebx
1220	movl	%ecx,16(%edi)
1221	movl	12(%esi),%eax
1222	# saved r[4]
1223	# ############### Calculate word 5
1224	xorl	%ecx,%ecx
1225	# sqr a[3]*a[2]
1226	mull	%edx
1227	addl	%eax,%eax
1228	adcl	%edx,%edx
1229	adcl	$0,%ecx
1230	addl	%eax,%ebp
1231	adcl	%edx,%ebx
1232	movl	12(%esi),%eax
1233	adcl	$0,%ecx
1234	movl	%ebp,20(%edi)
1235	# saved r[5]
1236	# ############### Calculate word 6
1237	xorl	%ebp,%ebp
1238	# sqr a[3]*a[3]
1239	mull	%eax
1240	addl	%eax,%ebx
1241	adcl	%edx,%ecx
1242	adcl	$0,%ebp
1243	movl	%ebx,24(%edi)
1244	# saved r[6]
1245	movl	%ecx,28(%edi)
1246	popl	%ebx
1247	popl	%ebp
1248	popl	%edi
1249	popl	%esi
1250	ret
1251#endif
1252