blob: cc067f717eae277f777329c487c15ab1e870b82b [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_add_words
4.hidden bn_mul_add_words
5.type bn_mul_add_words,@function
6.align 16
7bn_mul_add_words:
8.L_bn_mul_add_words_begin:
Adam Langleye9ada862015-05-11 17:20:37 -07009 call .L000PIC_me_up
10.L000PIC_me_up:
11 popl %eax
12 leal OPENSSL_ia32cap_P-.L000PIC_me_up(%eax),%eax
13 btl $26,(%eax)
14 jnc .L001maw_non_sse2
15 movl 4(%esp),%eax
16 movl 8(%esp),%edx
17 movl 12(%esp),%ecx
18 movd 16(%esp),%mm0
19 pxor %mm1,%mm1
20 jmp .L002maw_sse2_entry
21.align 16
22.L003maw_sse2_unrolled:
23 movd (%eax),%mm3
24 paddq %mm3,%mm1
25 movd (%edx),%mm2
26 pmuludq %mm0,%mm2
27 movd 4(%edx),%mm4
28 pmuludq %mm0,%mm4
29 movd 8(%edx),%mm6
30 pmuludq %mm0,%mm6
31 movd 12(%edx),%mm7
32 pmuludq %mm0,%mm7
33 paddq %mm2,%mm1
34 movd 4(%eax),%mm3
35 paddq %mm4,%mm3
36 movd 8(%eax),%mm5
37 paddq %mm6,%mm5
38 movd 12(%eax),%mm4
39 paddq %mm4,%mm7
40 movd %mm1,(%eax)
41 movd 16(%edx),%mm2
42 pmuludq %mm0,%mm2
43 psrlq $32,%mm1
44 movd 20(%edx),%mm4
45 pmuludq %mm0,%mm4
46 paddq %mm3,%mm1
47 movd 24(%edx),%mm6
48 pmuludq %mm0,%mm6
49 movd %mm1,4(%eax)
50 psrlq $32,%mm1
51 movd 28(%edx),%mm3
52 addl $32,%edx
53 pmuludq %mm0,%mm3
54 paddq %mm5,%mm1
55 movd 16(%eax),%mm5
56 paddq %mm5,%mm2
57 movd %mm1,8(%eax)
58 psrlq $32,%mm1
59 paddq %mm7,%mm1
60 movd 20(%eax),%mm5
61 paddq %mm5,%mm4
62 movd %mm1,12(%eax)
63 psrlq $32,%mm1
64 paddq %mm2,%mm1
65 movd 24(%eax),%mm5
66 paddq %mm5,%mm6
67 movd %mm1,16(%eax)
68 psrlq $32,%mm1
69 paddq %mm4,%mm1
70 movd 28(%eax),%mm5
71 paddq %mm5,%mm3
72 movd %mm1,20(%eax)
73 psrlq $32,%mm1
74 paddq %mm6,%mm1
75 movd %mm1,24(%eax)
76 psrlq $32,%mm1
77 paddq %mm3,%mm1
78 movd %mm1,28(%eax)
79 leal 32(%eax),%eax
80 psrlq $32,%mm1
81 subl $8,%ecx
82 jz .L004maw_sse2_exit
83.L002maw_sse2_entry:
84 testl $4294967288,%ecx
85 jnz .L003maw_sse2_unrolled
86.align 4
87.L005maw_sse2_loop:
88 movd (%edx),%mm2
89 movd (%eax),%mm3
90 pmuludq %mm0,%mm2
91 leal 4(%edx),%edx
92 paddq %mm3,%mm1
93 paddq %mm2,%mm1
94 movd %mm1,(%eax)
95 subl $1,%ecx
96 psrlq $32,%mm1
97 leal 4(%eax),%eax
98 jnz .L005maw_sse2_loop
99.L004maw_sse2_exit:
100 movd %mm1,%eax
101 emms
102 ret
103.align 16
104.L001maw_non_sse2:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800105 pushl %ebp
106 pushl %ebx
107 pushl %esi
108 pushl %edi
109
110 xorl %esi,%esi
111 movl 20(%esp),%edi
112 movl 28(%esp),%ecx
113 movl 24(%esp),%ebx
114 andl $4294967288,%ecx
115 movl 32(%esp),%ebp
116 pushl %ecx
Adam Langleye9ada862015-05-11 17:20:37 -0700117 jz .L006maw_finish
Adam Langleyd9e397b2015-01-22 14:27:53 -0800118.align 16
Adam Langleye9ada862015-05-11 17:20:37 -0700119.L007maw_loop:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800120
121 movl (%ebx),%eax
122 mull %ebp
123 addl %esi,%eax
124 adcl $0,%edx
125 addl (%edi),%eax
126 adcl $0,%edx
127 movl %eax,(%edi)
128 movl %edx,%esi
129
130 movl 4(%ebx),%eax
131 mull %ebp
132 addl %esi,%eax
133 adcl $0,%edx
134 addl 4(%edi),%eax
135 adcl $0,%edx
136 movl %eax,4(%edi)
137 movl %edx,%esi
138
139 movl 8(%ebx),%eax
140 mull %ebp
141 addl %esi,%eax
142 adcl $0,%edx
143 addl 8(%edi),%eax
144 adcl $0,%edx
145 movl %eax,8(%edi)
146 movl %edx,%esi
147
148 movl 12(%ebx),%eax
149 mull %ebp
150 addl %esi,%eax
151 adcl $0,%edx
152 addl 12(%edi),%eax
153 adcl $0,%edx
154 movl %eax,12(%edi)
155 movl %edx,%esi
156
157 movl 16(%ebx),%eax
158 mull %ebp
159 addl %esi,%eax
160 adcl $0,%edx
161 addl 16(%edi),%eax
162 adcl $0,%edx
163 movl %eax,16(%edi)
164 movl %edx,%esi
165
166 movl 20(%ebx),%eax
167 mull %ebp
168 addl %esi,%eax
169 adcl $0,%edx
170 addl 20(%edi),%eax
171 adcl $0,%edx
172 movl %eax,20(%edi)
173 movl %edx,%esi
174
175 movl 24(%ebx),%eax
176 mull %ebp
177 addl %esi,%eax
178 adcl $0,%edx
179 addl 24(%edi),%eax
180 adcl $0,%edx
181 movl %eax,24(%edi)
182 movl %edx,%esi
183
184 movl 28(%ebx),%eax
185 mull %ebp
186 addl %esi,%eax
187 adcl $0,%edx
188 addl 28(%edi),%eax
189 adcl $0,%edx
190 movl %eax,28(%edi)
191 movl %edx,%esi
192
193 subl $8,%ecx
194 leal 32(%ebx),%ebx
195 leal 32(%edi),%edi
Adam Langleye9ada862015-05-11 17:20:37 -0700196 jnz .L007maw_loop
197.L006maw_finish:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800198 movl 32(%esp),%ecx
199 andl $7,%ecx
Adam Langleye9ada862015-05-11 17:20:37 -0700200 jnz .L008maw_finish2
201 jmp .L009maw_end
202.L008maw_finish2:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800203
204 movl (%ebx),%eax
205 mull %ebp
206 addl %esi,%eax
207 adcl $0,%edx
208 addl (%edi),%eax
209 adcl $0,%edx
210 decl %ecx
211 movl %eax,(%edi)
212 movl %edx,%esi
Adam Langleye9ada862015-05-11 17:20:37 -0700213 jz .L009maw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800214
215 movl 4(%ebx),%eax
216 mull %ebp
217 addl %esi,%eax
218 adcl $0,%edx
219 addl 4(%edi),%eax
220 adcl $0,%edx
221 decl %ecx
222 movl %eax,4(%edi)
223 movl %edx,%esi
Adam Langleye9ada862015-05-11 17:20:37 -0700224 jz .L009maw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800225
226 movl 8(%ebx),%eax
227 mull %ebp
228 addl %esi,%eax
229 adcl $0,%edx
230 addl 8(%edi),%eax
231 adcl $0,%edx
232 decl %ecx
233 movl %eax,8(%edi)
234 movl %edx,%esi
Adam Langleye9ada862015-05-11 17:20:37 -0700235 jz .L009maw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800236
237 movl 12(%ebx),%eax
238 mull %ebp
239 addl %esi,%eax
240 adcl $0,%edx
241 addl 12(%edi),%eax
242 adcl $0,%edx
243 decl %ecx
244 movl %eax,12(%edi)
245 movl %edx,%esi
Adam Langleye9ada862015-05-11 17:20:37 -0700246 jz .L009maw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800247
248 movl 16(%ebx),%eax
249 mull %ebp
250 addl %esi,%eax
251 adcl $0,%edx
252 addl 16(%edi),%eax
253 adcl $0,%edx
254 decl %ecx
255 movl %eax,16(%edi)
256 movl %edx,%esi
Adam Langleye9ada862015-05-11 17:20:37 -0700257 jz .L009maw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800258
259 movl 20(%ebx),%eax
260 mull %ebp
261 addl %esi,%eax
262 adcl $0,%edx
263 addl 20(%edi),%eax
264 adcl $0,%edx
265 decl %ecx
266 movl %eax,20(%edi)
267 movl %edx,%esi
Adam Langleye9ada862015-05-11 17:20:37 -0700268 jz .L009maw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800269
270 movl 24(%ebx),%eax
271 mull %ebp
272 addl %esi,%eax
273 adcl $0,%edx
274 addl 24(%edi),%eax
275 adcl $0,%edx
276 movl %eax,24(%edi)
277 movl %edx,%esi
Adam Langleye9ada862015-05-11 17:20:37 -0700278.L009maw_end:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800279 movl %esi,%eax
280 popl %ecx
281 popl %edi
282 popl %esi
283 popl %ebx
284 popl %ebp
285 ret
286.size bn_mul_add_words,.-.L_bn_mul_add_words_begin
287.globl bn_mul_words
288.hidden bn_mul_words
289.type bn_mul_words,@function
290.align 16
291bn_mul_words:
292.L_bn_mul_words_begin:
Adam Langleye9ada862015-05-11 17:20:37 -0700293 call .L010PIC_me_up
294.L010PIC_me_up:
295 popl %eax
296 leal OPENSSL_ia32cap_P-.L010PIC_me_up(%eax),%eax
297 btl $26,(%eax)
298 jnc .L011mw_non_sse2
299 movl 4(%esp),%eax
300 movl 8(%esp),%edx
301 movl 12(%esp),%ecx
302 movd 16(%esp),%mm0
303 pxor %mm1,%mm1
304.align 16
305.L012mw_sse2_loop:
306 movd (%edx),%mm2
307 pmuludq %mm0,%mm2
308 leal 4(%edx),%edx
309 paddq %mm2,%mm1
310 movd %mm1,(%eax)
311 subl $1,%ecx
312 psrlq $32,%mm1
313 leal 4(%eax),%eax
314 jnz .L012mw_sse2_loop
315 movd %mm1,%eax
316 emms
317 ret
318.align 16
319.L011mw_non_sse2:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800320 pushl %ebp
321 pushl %ebx
322 pushl %esi
323 pushl %edi
324
325 xorl %esi,%esi
326 movl 20(%esp),%edi
327 movl 24(%esp),%ebx
328 movl 28(%esp),%ebp
329 movl 32(%esp),%ecx
330 andl $4294967288,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -0700331 jz .L013mw_finish
332.L014mw_loop:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800333
334 movl (%ebx),%eax
335 mull %ecx
336 addl %esi,%eax
337 adcl $0,%edx
338 movl %eax,(%edi)
339 movl %edx,%esi
340
341 movl 4(%ebx),%eax
342 mull %ecx
343 addl %esi,%eax
344 adcl $0,%edx
345 movl %eax,4(%edi)
346 movl %edx,%esi
347
348 movl 8(%ebx),%eax
349 mull %ecx
350 addl %esi,%eax
351 adcl $0,%edx
352 movl %eax,8(%edi)
353 movl %edx,%esi
354
355 movl 12(%ebx),%eax
356 mull %ecx
357 addl %esi,%eax
358 adcl $0,%edx
359 movl %eax,12(%edi)
360 movl %edx,%esi
361
362 movl 16(%ebx),%eax
363 mull %ecx
364 addl %esi,%eax
365 adcl $0,%edx
366 movl %eax,16(%edi)
367 movl %edx,%esi
368
369 movl 20(%ebx),%eax
370 mull %ecx
371 addl %esi,%eax
372 adcl $0,%edx
373 movl %eax,20(%edi)
374 movl %edx,%esi
375
376 movl 24(%ebx),%eax
377 mull %ecx
378 addl %esi,%eax
379 adcl $0,%edx
380 movl %eax,24(%edi)
381 movl %edx,%esi
382
383 movl 28(%ebx),%eax
384 mull %ecx
385 addl %esi,%eax
386 adcl $0,%edx
387 movl %eax,28(%edi)
388 movl %edx,%esi
389
390 addl $32,%ebx
391 addl $32,%edi
392 subl $8,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -0700393 jz .L013mw_finish
394 jmp .L014mw_loop
395.L013mw_finish:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800396 movl 28(%esp),%ebp
397 andl $7,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -0700398 jnz .L015mw_finish2
399 jmp .L016mw_end
400.L015mw_finish2:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800401
402 movl (%ebx),%eax
403 mull %ecx
404 addl %esi,%eax
405 adcl $0,%edx
406 movl %eax,(%edi)
407 movl %edx,%esi
408 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -0700409 jz .L016mw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800410
411 movl 4(%ebx),%eax
412 mull %ecx
413 addl %esi,%eax
414 adcl $0,%edx
415 movl %eax,4(%edi)
416 movl %edx,%esi
417 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -0700418 jz .L016mw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800419
420 movl 8(%ebx),%eax
421 mull %ecx
422 addl %esi,%eax
423 adcl $0,%edx
424 movl %eax,8(%edi)
425 movl %edx,%esi
426 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -0700427 jz .L016mw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800428
429 movl 12(%ebx),%eax
430 mull %ecx
431 addl %esi,%eax
432 adcl $0,%edx
433 movl %eax,12(%edi)
434 movl %edx,%esi
435 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -0700436 jz .L016mw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800437
438 movl 16(%ebx),%eax
439 mull %ecx
440 addl %esi,%eax
441 adcl $0,%edx
442 movl %eax,16(%edi)
443 movl %edx,%esi
444 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -0700445 jz .L016mw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800446
447 movl 20(%ebx),%eax
448 mull %ecx
449 addl %esi,%eax
450 adcl $0,%edx
451 movl %eax,20(%edi)
452 movl %edx,%esi
453 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -0700454 jz .L016mw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800455
456 movl 24(%ebx),%eax
457 mull %ecx
458 addl %esi,%eax
459 adcl $0,%edx
460 movl %eax,24(%edi)
461 movl %edx,%esi
Adam Langleye9ada862015-05-11 17:20:37 -0700462.L016mw_end:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800463 movl %esi,%eax
464 popl %edi
465 popl %esi
466 popl %ebx
467 popl %ebp
468 ret
469.size bn_mul_words,.-.L_bn_mul_words_begin
470.globl bn_sqr_words
471.hidden bn_sqr_words
472.type bn_sqr_words,@function
473.align 16
474bn_sqr_words:
475.L_bn_sqr_words_begin:
Adam Langleye9ada862015-05-11 17:20:37 -0700476 call .L017PIC_me_up
477.L017PIC_me_up:
478 popl %eax
479 leal OPENSSL_ia32cap_P-.L017PIC_me_up(%eax),%eax
480 btl $26,(%eax)
481 jnc .L018sqr_non_sse2
482 movl 4(%esp),%eax
483 movl 8(%esp),%edx
484 movl 12(%esp),%ecx
485.align 16
486.L019sqr_sse2_loop:
487 movd (%edx),%mm0
488 pmuludq %mm0,%mm0
489 leal 4(%edx),%edx
490 movq %mm0,(%eax)
491 subl $1,%ecx
492 leal 8(%eax),%eax
493 jnz .L019sqr_sse2_loop
494 emms
495 ret
496.align 16
497.L018sqr_non_sse2:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800498 pushl %ebp
499 pushl %ebx
500 pushl %esi
501 pushl %edi
502
503 movl 20(%esp),%esi
504 movl 24(%esp),%edi
505 movl 28(%esp),%ebx
506 andl $4294967288,%ebx
Adam Langleye9ada862015-05-11 17:20:37 -0700507 jz .L020sw_finish
508.L021sw_loop:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800509
510 movl (%edi),%eax
511 mull %eax
512 movl %eax,(%esi)
513 movl %edx,4(%esi)
514
515 movl 4(%edi),%eax
516 mull %eax
517 movl %eax,8(%esi)
518 movl %edx,12(%esi)
519
520 movl 8(%edi),%eax
521 mull %eax
522 movl %eax,16(%esi)
523 movl %edx,20(%esi)
524
525 movl 12(%edi),%eax
526 mull %eax
527 movl %eax,24(%esi)
528 movl %edx,28(%esi)
529
530 movl 16(%edi),%eax
531 mull %eax
532 movl %eax,32(%esi)
533 movl %edx,36(%esi)
534
535 movl 20(%edi),%eax
536 mull %eax
537 movl %eax,40(%esi)
538 movl %edx,44(%esi)
539
540 movl 24(%edi),%eax
541 mull %eax
542 movl %eax,48(%esi)
543 movl %edx,52(%esi)
544
545 movl 28(%edi),%eax
546 mull %eax
547 movl %eax,56(%esi)
548 movl %edx,60(%esi)
549
550 addl $32,%edi
551 addl $64,%esi
552 subl $8,%ebx
Adam Langleye9ada862015-05-11 17:20:37 -0700553 jnz .L021sw_loop
554.L020sw_finish:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800555 movl 28(%esp),%ebx
556 andl $7,%ebx
Adam Langleye9ada862015-05-11 17:20:37 -0700557 jz .L022sw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800558
559 movl (%edi),%eax
560 mull %eax
561 movl %eax,(%esi)
562 decl %ebx
563 movl %edx,4(%esi)
Adam Langleye9ada862015-05-11 17:20:37 -0700564 jz .L022sw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800565
566 movl 4(%edi),%eax
567 mull %eax
568 movl %eax,8(%esi)
569 decl %ebx
570 movl %edx,12(%esi)
Adam Langleye9ada862015-05-11 17:20:37 -0700571 jz .L022sw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800572
573 movl 8(%edi),%eax
574 mull %eax
575 movl %eax,16(%esi)
576 decl %ebx
577 movl %edx,20(%esi)
Adam Langleye9ada862015-05-11 17:20:37 -0700578 jz .L022sw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800579
580 movl 12(%edi),%eax
581 mull %eax
582 movl %eax,24(%esi)
583 decl %ebx
584 movl %edx,28(%esi)
Adam Langleye9ada862015-05-11 17:20:37 -0700585 jz .L022sw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800586
587 movl 16(%edi),%eax
588 mull %eax
589 movl %eax,32(%esi)
590 decl %ebx
591 movl %edx,36(%esi)
Adam Langleye9ada862015-05-11 17:20:37 -0700592 jz .L022sw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800593
594 movl 20(%edi),%eax
595 mull %eax
596 movl %eax,40(%esi)
597 decl %ebx
598 movl %edx,44(%esi)
Adam Langleye9ada862015-05-11 17:20:37 -0700599 jz .L022sw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800600
601 movl 24(%edi),%eax
602 mull %eax
603 movl %eax,48(%esi)
604 movl %edx,52(%esi)
Adam Langleye9ada862015-05-11 17:20:37 -0700605.L022sw_end:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800606 popl %edi
607 popl %esi
608 popl %ebx
609 popl %ebp
610 ret
611.size bn_sqr_words,.-.L_bn_sqr_words_begin
612.globl bn_div_words
613.hidden bn_div_words
614.type bn_div_words,@function
615.align 16
616bn_div_words:
617.L_bn_div_words_begin:
618 movl 4(%esp),%edx
619 movl 8(%esp),%eax
620 movl 12(%esp),%ecx
621 divl %ecx
622 ret
623.size bn_div_words,.-.L_bn_div_words_begin
624.globl bn_add_words
625.hidden bn_add_words
626.type bn_add_words,@function
627.align 16
628bn_add_words:
629.L_bn_add_words_begin:
630 pushl %ebp
631 pushl %ebx
632 pushl %esi
633 pushl %edi
634
635 movl 20(%esp),%ebx
636 movl 24(%esp),%esi
637 movl 28(%esp),%edi
638 movl 32(%esp),%ebp
639 xorl %eax,%eax
640 andl $4294967288,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -0700641 jz .L023aw_finish
642.L024aw_loop:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800643
644 movl (%esi),%ecx
645 movl (%edi),%edx
646 addl %eax,%ecx
647 movl $0,%eax
648 adcl %eax,%eax
649 addl %edx,%ecx
650 adcl $0,%eax
651 movl %ecx,(%ebx)
652
653 movl 4(%esi),%ecx
654 movl 4(%edi),%edx
655 addl %eax,%ecx
656 movl $0,%eax
657 adcl %eax,%eax
658 addl %edx,%ecx
659 adcl $0,%eax
660 movl %ecx,4(%ebx)
661
662 movl 8(%esi),%ecx
663 movl 8(%edi),%edx
664 addl %eax,%ecx
665 movl $0,%eax
666 adcl %eax,%eax
667 addl %edx,%ecx
668 adcl $0,%eax
669 movl %ecx,8(%ebx)
670
671 movl 12(%esi),%ecx
672 movl 12(%edi),%edx
673 addl %eax,%ecx
674 movl $0,%eax
675 adcl %eax,%eax
676 addl %edx,%ecx
677 adcl $0,%eax
678 movl %ecx,12(%ebx)
679
680 movl 16(%esi),%ecx
681 movl 16(%edi),%edx
682 addl %eax,%ecx
683 movl $0,%eax
684 adcl %eax,%eax
685 addl %edx,%ecx
686 adcl $0,%eax
687 movl %ecx,16(%ebx)
688
689 movl 20(%esi),%ecx
690 movl 20(%edi),%edx
691 addl %eax,%ecx
692 movl $0,%eax
693 adcl %eax,%eax
694 addl %edx,%ecx
695 adcl $0,%eax
696 movl %ecx,20(%ebx)
697
698 movl 24(%esi),%ecx
699 movl 24(%edi),%edx
700 addl %eax,%ecx
701 movl $0,%eax
702 adcl %eax,%eax
703 addl %edx,%ecx
704 adcl $0,%eax
705 movl %ecx,24(%ebx)
706
707 movl 28(%esi),%ecx
708 movl 28(%edi),%edx
709 addl %eax,%ecx
710 movl $0,%eax
711 adcl %eax,%eax
712 addl %edx,%ecx
713 adcl $0,%eax
714 movl %ecx,28(%ebx)
715
716 addl $32,%esi
717 addl $32,%edi
718 addl $32,%ebx
719 subl $8,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -0700720 jnz .L024aw_loop
721.L023aw_finish:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800722 movl 32(%esp),%ebp
723 andl $7,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -0700724 jz .L025aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800725
726 movl (%esi),%ecx
727 movl (%edi),%edx
728 addl %eax,%ecx
729 movl $0,%eax
730 adcl %eax,%eax
731 addl %edx,%ecx
732 adcl $0,%eax
733 decl %ebp
734 movl %ecx,(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -0700735 jz .L025aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800736
737 movl 4(%esi),%ecx
738 movl 4(%edi),%edx
739 addl %eax,%ecx
740 movl $0,%eax
741 adcl %eax,%eax
742 addl %edx,%ecx
743 adcl $0,%eax
744 decl %ebp
745 movl %ecx,4(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -0700746 jz .L025aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800747
748 movl 8(%esi),%ecx
749 movl 8(%edi),%edx
750 addl %eax,%ecx
751 movl $0,%eax
752 adcl %eax,%eax
753 addl %edx,%ecx
754 adcl $0,%eax
755 decl %ebp
756 movl %ecx,8(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -0700757 jz .L025aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800758
759 movl 12(%esi),%ecx
760 movl 12(%edi),%edx
761 addl %eax,%ecx
762 movl $0,%eax
763 adcl %eax,%eax
764 addl %edx,%ecx
765 adcl $0,%eax
766 decl %ebp
767 movl %ecx,12(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -0700768 jz .L025aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800769
770 movl 16(%esi),%ecx
771 movl 16(%edi),%edx
772 addl %eax,%ecx
773 movl $0,%eax
774 adcl %eax,%eax
775 addl %edx,%ecx
776 adcl $0,%eax
777 decl %ebp
778 movl %ecx,16(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -0700779 jz .L025aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800780
781 movl 20(%esi),%ecx
782 movl 20(%edi),%edx
783 addl %eax,%ecx
784 movl $0,%eax
785 adcl %eax,%eax
786 addl %edx,%ecx
787 adcl $0,%eax
788 decl %ebp
789 movl %ecx,20(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -0700790 jz .L025aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800791
792 movl 24(%esi),%ecx
793 movl 24(%edi),%edx
794 addl %eax,%ecx
795 movl $0,%eax
796 adcl %eax,%eax
797 addl %edx,%ecx
798 adcl $0,%eax
799 movl %ecx,24(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -0700800.L025aw_end:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800801 popl %edi
802 popl %esi
803 popl %ebx
804 popl %ebp
805 ret
806.size bn_add_words,.-.L_bn_add_words_begin
807.globl bn_sub_words
808.hidden bn_sub_words
809.type bn_sub_words,@function
810.align 16
811bn_sub_words:
812.L_bn_sub_words_begin:
813 pushl %ebp
814 pushl %ebx
815 pushl %esi
816 pushl %edi
817
818 movl 20(%esp),%ebx
819 movl 24(%esp),%esi
820 movl 28(%esp),%edi
821 movl 32(%esp),%ebp
822 xorl %eax,%eax
823 andl $4294967288,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -0700824 jz .L026aw_finish
825.L027aw_loop:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800826
827 movl (%esi),%ecx
828 movl (%edi),%edx
829 subl %eax,%ecx
830 movl $0,%eax
831 adcl %eax,%eax
832 subl %edx,%ecx
833 adcl $0,%eax
834 movl %ecx,(%ebx)
835
836 movl 4(%esi),%ecx
837 movl 4(%edi),%edx
838 subl %eax,%ecx
839 movl $0,%eax
840 adcl %eax,%eax
841 subl %edx,%ecx
842 adcl $0,%eax
843 movl %ecx,4(%ebx)
844
845 movl 8(%esi),%ecx
846 movl 8(%edi),%edx
847 subl %eax,%ecx
848 movl $0,%eax
849 adcl %eax,%eax
850 subl %edx,%ecx
851 adcl $0,%eax
852 movl %ecx,8(%ebx)
853
854 movl 12(%esi),%ecx
855 movl 12(%edi),%edx
856 subl %eax,%ecx
857 movl $0,%eax
858 adcl %eax,%eax
859 subl %edx,%ecx
860 adcl $0,%eax
861 movl %ecx,12(%ebx)
862
863 movl 16(%esi),%ecx
864 movl 16(%edi),%edx
865 subl %eax,%ecx
866 movl $0,%eax
867 adcl %eax,%eax
868 subl %edx,%ecx
869 adcl $0,%eax
870 movl %ecx,16(%ebx)
871
872 movl 20(%esi),%ecx
873 movl 20(%edi),%edx
874 subl %eax,%ecx
875 movl $0,%eax
876 adcl %eax,%eax
877 subl %edx,%ecx
878 adcl $0,%eax
879 movl %ecx,20(%ebx)
880
881 movl 24(%esi),%ecx
882 movl 24(%edi),%edx
883 subl %eax,%ecx
884 movl $0,%eax
885 adcl %eax,%eax
886 subl %edx,%ecx
887 adcl $0,%eax
888 movl %ecx,24(%ebx)
889
890 movl 28(%esi),%ecx
891 movl 28(%edi),%edx
892 subl %eax,%ecx
893 movl $0,%eax
894 adcl %eax,%eax
895 subl %edx,%ecx
896 adcl $0,%eax
897 movl %ecx,28(%ebx)
898
899 addl $32,%esi
900 addl $32,%edi
901 addl $32,%ebx
902 subl $8,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -0700903 jnz .L027aw_loop
904.L026aw_finish:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800905 movl 32(%esp),%ebp
906 andl $7,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -0700907 jz .L028aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800908
909 movl (%esi),%ecx
910 movl (%edi),%edx
911 subl %eax,%ecx
912 movl $0,%eax
913 adcl %eax,%eax
914 subl %edx,%ecx
915 adcl $0,%eax
916 decl %ebp
917 movl %ecx,(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -0700918 jz .L028aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800919
920 movl 4(%esi),%ecx
921 movl 4(%edi),%edx
922 subl %eax,%ecx
923 movl $0,%eax
924 adcl %eax,%eax
925 subl %edx,%ecx
926 adcl $0,%eax
927 decl %ebp
928 movl %ecx,4(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -0700929 jz .L028aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800930
931 movl 8(%esi),%ecx
932 movl 8(%edi),%edx
933 subl %eax,%ecx
934 movl $0,%eax
935 adcl %eax,%eax
936 subl %edx,%ecx
937 adcl $0,%eax
938 decl %ebp
939 movl %ecx,8(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -0700940 jz .L028aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800941
942 movl 12(%esi),%ecx
943 movl 12(%edi),%edx
944 subl %eax,%ecx
945 movl $0,%eax
946 adcl %eax,%eax
947 subl %edx,%ecx
948 adcl $0,%eax
949 decl %ebp
950 movl %ecx,12(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -0700951 jz .L028aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800952
953 movl 16(%esi),%ecx
954 movl 16(%edi),%edx
955 subl %eax,%ecx
956 movl $0,%eax
957 adcl %eax,%eax
958 subl %edx,%ecx
959 adcl $0,%eax
960 decl %ebp
961 movl %ecx,16(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -0700962 jz .L028aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800963
964 movl 20(%esi),%ecx
965 movl 20(%edi),%edx
966 subl %eax,%ecx
967 movl $0,%eax
968 adcl %eax,%eax
969 subl %edx,%ecx
970 adcl $0,%eax
971 decl %ebp
972 movl %ecx,20(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -0700973 jz .L028aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -0800974
975 movl 24(%esi),%ecx
976 movl 24(%edi),%edx
977 subl %eax,%ecx
978 movl $0,%eax
979 adcl %eax,%eax
980 subl %edx,%ecx
981 adcl $0,%eax
982 movl %ecx,24(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -0700983.L028aw_end:
Adam Langleyd9e397b2015-01-22 14:27:53 -0800984 popl %edi
985 popl %esi
986 popl %ebx
987 popl %ebp
988 ret
989.size bn_sub_words,.-.L_bn_sub_words_begin
990.globl bn_sub_part_words
991.hidden bn_sub_part_words
992.type bn_sub_part_words,@function
993.align 16
994bn_sub_part_words:
995.L_bn_sub_part_words_begin:
996 pushl %ebp
997 pushl %ebx
998 pushl %esi
999 pushl %edi
1000
1001 movl 20(%esp),%ebx
1002 movl 24(%esp),%esi
1003 movl 28(%esp),%edi
1004 movl 32(%esp),%ebp
1005 xorl %eax,%eax
1006 andl $4294967288,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001007 jz .L029aw_finish
1008.L030aw_loop:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001009
1010 movl (%esi),%ecx
1011 movl (%edi),%edx
1012 subl %eax,%ecx
1013 movl $0,%eax
1014 adcl %eax,%eax
1015 subl %edx,%ecx
1016 adcl $0,%eax
1017 movl %ecx,(%ebx)
1018
1019 movl 4(%esi),%ecx
1020 movl 4(%edi),%edx
1021 subl %eax,%ecx
1022 movl $0,%eax
1023 adcl %eax,%eax
1024 subl %edx,%ecx
1025 adcl $0,%eax
1026 movl %ecx,4(%ebx)
1027
1028 movl 8(%esi),%ecx
1029 movl 8(%edi),%edx
1030 subl %eax,%ecx
1031 movl $0,%eax
1032 adcl %eax,%eax
1033 subl %edx,%ecx
1034 adcl $0,%eax
1035 movl %ecx,8(%ebx)
1036
1037 movl 12(%esi),%ecx
1038 movl 12(%edi),%edx
1039 subl %eax,%ecx
1040 movl $0,%eax
1041 adcl %eax,%eax
1042 subl %edx,%ecx
1043 adcl $0,%eax
1044 movl %ecx,12(%ebx)
1045
1046 movl 16(%esi),%ecx
1047 movl 16(%edi),%edx
1048 subl %eax,%ecx
1049 movl $0,%eax
1050 adcl %eax,%eax
1051 subl %edx,%ecx
1052 adcl $0,%eax
1053 movl %ecx,16(%ebx)
1054
1055 movl 20(%esi),%ecx
1056 movl 20(%edi),%edx
1057 subl %eax,%ecx
1058 movl $0,%eax
1059 adcl %eax,%eax
1060 subl %edx,%ecx
1061 adcl $0,%eax
1062 movl %ecx,20(%ebx)
1063
1064 movl 24(%esi),%ecx
1065 movl 24(%edi),%edx
1066 subl %eax,%ecx
1067 movl $0,%eax
1068 adcl %eax,%eax
1069 subl %edx,%ecx
1070 adcl $0,%eax
1071 movl %ecx,24(%ebx)
1072
1073 movl 28(%esi),%ecx
1074 movl 28(%edi),%edx
1075 subl %eax,%ecx
1076 movl $0,%eax
1077 adcl %eax,%eax
1078 subl %edx,%ecx
1079 adcl $0,%eax
1080 movl %ecx,28(%ebx)
1081
1082 addl $32,%esi
1083 addl $32,%edi
1084 addl $32,%ebx
1085 subl $8,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001086 jnz .L030aw_loop
1087.L029aw_finish:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001088 movl 32(%esp),%ebp
1089 andl $7,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001090 jz .L031aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001091
1092 movl (%esi),%ecx
1093 movl (%edi),%edx
1094 subl %eax,%ecx
1095 movl $0,%eax
1096 adcl %eax,%eax
1097 subl %edx,%ecx
1098 adcl $0,%eax
1099 movl %ecx,(%ebx)
1100 addl $4,%esi
1101 addl $4,%edi
1102 addl $4,%ebx
1103 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001104 jz .L031aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001105
1106 movl (%esi),%ecx
1107 movl (%edi),%edx
1108 subl %eax,%ecx
1109 movl $0,%eax
1110 adcl %eax,%eax
1111 subl %edx,%ecx
1112 adcl $0,%eax
1113 movl %ecx,(%ebx)
1114 addl $4,%esi
1115 addl $4,%edi
1116 addl $4,%ebx
1117 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001118 jz .L031aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001119
1120 movl (%esi),%ecx
1121 movl (%edi),%edx
1122 subl %eax,%ecx
1123 movl $0,%eax
1124 adcl %eax,%eax
1125 subl %edx,%ecx
1126 adcl $0,%eax
1127 movl %ecx,(%ebx)
1128 addl $4,%esi
1129 addl $4,%edi
1130 addl $4,%ebx
1131 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001132 jz .L031aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001133
1134 movl (%esi),%ecx
1135 movl (%edi),%edx
1136 subl %eax,%ecx
1137 movl $0,%eax
1138 adcl %eax,%eax
1139 subl %edx,%ecx
1140 adcl $0,%eax
1141 movl %ecx,(%ebx)
1142 addl $4,%esi
1143 addl $4,%edi
1144 addl $4,%ebx
1145 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001146 jz .L031aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001147
1148 movl (%esi),%ecx
1149 movl (%edi),%edx
1150 subl %eax,%ecx
1151 movl $0,%eax
1152 adcl %eax,%eax
1153 subl %edx,%ecx
1154 adcl $0,%eax
1155 movl %ecx,(%ebx)
1156 addl $4,%esi
1157 addl $4,%edi
1158 addl $4,%ebx
1159 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001160 jz .L031aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001161
1162 movl (%esi),%ecx
1163 movl (%edi),%edx
1164 subl %eax,%ecx
1165 movl $0,%eax
1166 adcl %eax,%eax
1167 subl %edx,%ecx
1168 adcl $0,%eax
1169 movl %ecx,(%ebx)
1170 addl $4,%esi
1171 addl $4,%edi
1172 addl $4,%ebx
1173 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001174 jz .L031aw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001175
1176 movl (%esi),%ecx
1177 movl (%edi),%edx
1178 subl %eax,%ecx
1179 movl $0,%eax
1180 adcl %eax,%eax
1181 subl %edx,%ecx
1182 adcl $0,%eax
1183 movl %ecx,(%ebx)
1184 addl $4,%esi
1185 addl $4,%edi
1186 addl $4,%ebx
Adam Langleye9ada862015-05-11 17:20:37 -07001187.L031aw_end:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001188 cmpl $0,36(%esp)
Adam Langleye9ada862015-05-11 17:20:37 -07001189 je .L032pw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001190 movl 36(%esp),%ebp
1191 cmpl $0,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001192 je .L032pw_end
1193 jge .L033pw_pos
Adam Langleyd9e397b2015-01-22 14:27:53 -08001194
1195 movl $0,%edx
1196 subl %ebp,%edx
1197 movl %edx,%ebp
1198 andl $4294967288,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001199 jz .L034pw_neg_finish
1200.L035pw_neg_loop:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001201
1202 movl $0,%ecx
1203 movl (%edi),%edx
1204 subl %eax,%ecx
1205 movl $0,%eax
1206 adcl %eax,%eax
1207 subl %edx,%ecx
1208 adcl $0,%eax
1209 movl %ecx,(%ebx)
1210
1211 movl $0,%ecx
1212 movl 4(%edi),%edx
1213 subl %eax,%ecx
1214 movl $0,%eax
1215 adcl %eax,%eax
1216 subl %edx,%ecx
1217 adcl $0,%eax
1218 movl %ecx,4(%ebx)
1219
1220 movl $0,%ecx
1221 movl 8(%edi),%edx
1222 subl %eax,%ecx
1223 movl $0,%eax
1224 adcl %eax,%eax
1225 subl %edx,%ecx
1226 adcl $0,%eax
1227 movl %ecx,8(%ebx)
1228
1229 movl $0,%ecx
1230 movl 12(%edi),%edx
1231 subl %eax,%ecx
1232 movl $0,%eax
1233 adcl %eax,%eax
1234 subl %edx,%ecx
1235 adcl $0,%eax
1236 movl %ecx,12(%ebx)
1237
1238 movl $0,%ecx
1239 movl 16(%edi),%edx
1240 subl %eax,%ecx
1241 movl $0,%eax
1242 adcl %eax,%eax
1243 subl %edx,%ecx
1244 adcl $0,%eax
1245 movl %ecx,16(%ebx)
1246
1247 movl $0,%ecx
1248 movl 20(%edi),%edx
1249 subl %eax,%ecx
1250 movl $0,%eax
1251 adcl %eax,%eax
1252 subl %edx,%ecx
1253 adcl $0,%eax
1254 movl %ecx,20(%ebx)
1255
1256 movl $0,%ecx
1257 movl 24(%edi),%edx
1258 subl %eax,%ecx
1259 movl $0,%eax
1260 adcl %eax,%eax
1261 subl %edx,%ecx
1262 adcl $0,%eax
1263 movl %ecx,24(%ebx)
1264
1265 movl $0,%ecx
1266 movl 28(%edi),%edx
1267 subl %eax,%ecx
1268 movl $0,%eax
1269 adcl %eax,%eax
1270 subl %edx,%ecx
1271 adcl $0,%eax
1272 movl %ecx,28(%ebx)
1273
1274 addl $32,%edi
1275 addl $32,%ebx
1276 subl $8,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001277 jnz .L035pw_neg_loop
1278.L034pw_neg_finish:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001279 movl 36(%esp),%edx
1280 movl $0,%ebp
1281 subl %edx,%ebp
1282 andl $7,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001283 jz .L032pw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001284
1285 movl $0,%ecx
1286 movl (%edi),%edx
1287 subl %eax,%ecx
1288 movl $0,%eax
1289 adcl %eax,%eax
1290 subl %edx,%ecx
1291 adcl $0,%eax
1292 decl %ebp
1293 movl %ecx,(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001294 jz .L032pw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001295
1296 movl $0,%ecx
1297 movl 4(%edi),%edx
1298 subl %eax,%ecx
1299 movl $0,%eax
1300 adcl %eax,%eax
1301 subl %edx,%ecx
1302 adcl $0,%eax
1303 decl %ebp
1304 movl %ecx,4(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001305 jz .L032pw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001306
1307 movl $0,%ecx
1308 movl 8(%edi),%edx
1309 subl %eax,%ecx
1310 movl $0,%eax
1311 adcl %eax,%eax
1312 subl %edx,%ecx
1313 adcl $0,%eax
1314 decl %ebp
1315 movl %ecx,8(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001316 jz .L032pw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001317
1318 movl $0,%ecx
1319 movl 12(%edi),%edx
1320 subl %eax,%ecx
1321 movl $0,%eax
1322 adcl %eax,%eax
1323 subl %edx,%ecx
1324 adcl $0,%eax
1325 decl %ebp
1326 movl %ecx,12(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001327 jz .L032pw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001328
1329 movl $0,%ecx
1330 movl 16(%edi),%edx
1331 subl %eax,%ecx
1332 movl $0,%eax
1333 adcl %eax,%eax
1334 subl %edx,%ecx
1335 adcl $0,%eax
1336 decl %ebp
1337 movl %ecx,16(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001338 jz .L032pw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001339
1340 movl $0,%ecx
1341 movl 20(%edi),%edx
1342 subl %eax,%ecx
1343 movl $0,%eax
1344 adcl %eax,%eax
1345 subl %edx,%ecx
1346 adcl $0,%eax
1347 decl %ebp
1348 movl %ecx,20(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001349 jz .L032pw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001350
1351 movl $0,%ecx
1352 movl 24(%edi),%edx
1353 subl %eax,%ecx
1354 movl $0,%eax
1355 adcl %eax,%eax
1356 subl %edx,%ecx
1357 adcl $0,%eax
1358 movl %ecx,24(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001359 jmp .L032pw_end
1360.L033pw_pos:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001361 andl $4294967288,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001362 jz .L036pw_pos_finish
1363.L037pw_pos_loop:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001364
1365 movl (%esi),%ecx
1366 subl %eax,%ecx
1367 movl %ecx,(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001368 jnc .L038pw_nc0
Adam Langleyd9e397b2015-01-22 14:27:53 -08001369
1370 movl 4(%esi),%ecx
1371 subl %eax,%ecx
1372 movl %ecx,4(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001373 jnc .L039pw_nc1
Adam Langleyd9e397b2015-01-22 14:27:53 -08001374
1375 movl 8(%esi),%ecx
1376 subl %eax,%ecx
1377 movl %ecx,8(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001378 jnc .L040pw_nc2
Adam Langleyd9e397b2015-01-22 14:27:53 -08001379
1380 movl 12(%esi),%ecx
1381 subl %eax,%ecx
1382 movl %ecx,12(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001383 jnc .L041pw_nc3
Adam Langleyd9e397b2015-01-22 14:27:53 -08001384
1385 movl 16(%esi),%ecx
1386 subl %eax,%ecx
1387 movl %ecx,16(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001388 jnc .L042pw_nc4
Adam Langleyd9e397b2015-01-22 14:27:53 -08001389
1390 movl 20(%esi),%ecx
1391 subl %eax,%ecx
1392 movl %ecx,20(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001393 jnc .L043pw_nc5
Adam Langleyd9e397b2015-01-22 14:27:53 -08001394
1395 movl 24(%esi),%ecx
1396 subl %eax,%ecx
1397 movl %ecx,24(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001398 jnc .L044pw_nc6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001399
1400 movl 28(%esi),%ecx
1401 subl %eax,%ecx
1402 movl %ecx,28(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001403 jnc .L045pw_nc7
Adam Langleyd9e397b2015-01-22 14:27:53 -08001404
1405 addl $32,%esi
1406 addl $32,%ebx
1407 subl $8,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001408 jnz .L037pw_pos_loop
1409.L036pw_pos_finish:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001410 movl 36(%esp),%ebp
1411 andl $7,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001412 jz .L032pw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001413
1414 movl (%esi),%ecx
1415 subl %eax,%ecx
1416 movl %ecx,(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001417 jnc .L046pw_tail_nc0
Adam Langleyd9e397b2015-01-22 14:27:53 -08001418 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001419 jz .L032pw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001420
1421 movl 4(%esi),%ecx
1422 subl %eax,%ecx
1423 movl %ecx,4(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001424 jnc .L047pw_tail_nc1
Adam Langleyd9e397b2015-01-22 14:27:53 -08001425 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001426 jz .L032pw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001427
1428 movl 8(%esi),%ecx
1429 subl %eax,%ecx
1430 movl %ecx,8(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001431 jnc .L048pw_tail_nc2
Adam Langleyd9e397b2015-01-22 14:27:53 -08001432 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001433 jz .L032pw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001434
1435 movl 12(%esi),%ecx
1436 subl %eax,%ecx
1437 movl %ecx,12(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001438 jnc .L049pw_tail_nc3
Adam Langleyd9e397b2015-01-22 14:27:53 -08001439 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001440 jz .L032pw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001441
1442 movl 16(%esi),%ecx
1443 subl %eax,%ecx
1444 movl %ecx,16(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001445 jnc .L050pw_tail_nc4
Adam Langleyd9e397b2015-01-22 14:27:53 -08001446 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001447 jz .L032pw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001448
1449 movl 20(%esi),%ecx
1450 subl %eax,%ecx
1451 movl %ecx,20(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001452 jnc .L051pw_tail_nc5
Adam Langleyd9e397b2015-01-22 14:27:53 -08001453 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001454 jz .L032pw_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001455
1456 movl 24(%esi),%ecx
1457 subl %eax,%ecx
1458 movl %ecx,24(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001459 jnc .L052pw_tail_nc6
Adam Langleyd9e397b2015-01-22 14:27:53 -08001460 movl $1,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001461 jmp .L032pw_end
1462.L053pw_nc_loop:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001463 movl (%esi),%ecx
1464 movl %ecx,(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001465.L038pw_nc0:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001466 movl 4(%esi),%ecx
1467 movl %ecx,4(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001468.L039pw_nc1:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001469 movl 8(%esi),%ecx
1470 movl %ecx,8(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001471.L040pw_nc2:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001472 movl 12(%esi),%ecx
1473 movl %ecx,12(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001474.L041pw_nc3:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001475 movl 16(%esi),%ecx
1476 movl %ecx,16(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001477.L042pw_nc4:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001478 movl 20(%esi),%ecx
1479 movl %ecx,20(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001480.L043pw_nc5:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001481 movl 24(%esi),%ecx
1482 movl %ecx,24(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001483.L044pw_nc6:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001484 movl 28(%esi),%ecx
1485 movl %ecx,28(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001486.L045pw_nc7:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001487
1488 addl $32,%esi
1489 addl $32,%ebx
1490 subl $8,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001491 jnz .L053pw_nc_loop
Adam Langleyd9e397b2015-01-22 14:27:53 -08001492 movl 36(%esp),%ebp
1493 andl $7,%ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001494 jz .L054pw_nc_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001495 movl (%esi),%ecx
1496 movl %ecx,(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001497.L046pw_tail_nc0:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001498 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001499 jz .L054pw_nc_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001500 movl 4(%esi),%ecx
1501 movl %ecx,4(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001502.L047pw_tail_nc1:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001503 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001504 jz .L054pw_nc_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001505 movl 8(%esi),%ecx
1506 movl %ecx,8(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001507.L048pw_tail_nc2:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001508 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001509 jz .L054pw_nc_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001510 movl 12(%esi),%ecx
1511 movl %ecx,12(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001512.L049pw_tail_nc3:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001513 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001514 jz .L054pw_nc_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001515 movl 16(%esi),%ecx
1516 movl %ecx,16(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001517.L050pw_tail_nc4:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001518 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001519 jz .L054pw_nc_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001520 movl 20(%esi),%ecx
1521 movl %ecx,20(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001522.L051pw_tail_nc5:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001523 decl %ebp
Adam Langleye9ada862015-05-11 17:20:37 -07001524 jz .L054pw_nc_end
Adam Langleyd9e397b2015-01-22 14:27:53 -08001525 movl 24(%esi),%ecx
1526 movl %ecx,24(%ebx)
Adam Langleye9ada862015-05-11 17:20:37 -07001527.L052pw_tail_nc6:
1528.L054pw_nc_end:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001529 movl $0,%eax
Adam Langleye9ada862015-05-11 17:20:37 -07001530.L032pw_end:
Adam Langleyd9e397b2015-01-22 14:27:53 -08001531 popl %edi
1532 popl %esi
1533 popl %ebx
1534 popl %ebp
1535 ret
1536.size bn_sub_part_words,.-.L_bn_sub_part_words_begin
1537#endif