blob: 858ba3743e25fe28d2193b1ce12c274d7a508b6a [file] [log] [blame]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001#if defined(__i386__)
Adam Langleyd9e397b2015-01-22 14:27:53 -08002.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