blob: 7ce8e794250a27d7030673f35786ff2a52498641 [file] [log] [blame]
Adam Langleyd9e397b2015-01-22 14:27:53 -08001#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