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