1%ifidn __OUTPUT_FORMAT__,obj 2section code use32 class=code align=64 3%elifidn __OUTPUT_FORMAT__,win32 4$@feat.00 equ 1 5section .text code align=64 6%else 7section .text code 8%endif 9;extern _OPENSSL_ia32cap_P 10global _bn_mul_add_words 11align 16 12_bn_mul_add_words: 13L$_bn_mul_add_words_begin: 14 lea eax,[_OPENSSL_ia32cap_P] 15 bt DWORD [eax],26 16 jnc NEAR L$000maw_non_sse2 17 mov eax,DWORD [4+esp] 18 mov edx,DWORD [8+esp] 19 mov ecx,DWORD [12+esp] 20 movd mm0,DWORD [16+esp] 21 pxor mm1,mm1 22 jmp NEAR L$001maw_sse2_entry 23align 16 24L$002maw_sse2_unrolled: 25 movd mm3,DWORD [eax] 26 paddq mm1,mm3 27 movd mm2,DWORD [edx] 28 pmuludq mm2,mm0 29 movd mm4,DWORD [4+edx] 30 pmuludq mm4,mm0 31 movd mm6,DWORD [8+edx] 32 pmuludq mm6,mm0 33 movd mm7,DWORD [12+edx] 34 pmuludq mm7,mm0 35 paddq mm1,mm2 36 movd mm3,DWORD [4+eax] 37 paddq mm3,mm4 38 movd mm5,DWORD [8+eax] 39 paddq mm5,mm6 40 movd mm4,DWORD [12+eax] 41 paddq mm7,mm4 42 movd DWORD [eax],mm1 43 movd mm2,DWORD [16+edx] 44 pmuludq mm2,mm0 45 psrlq mm1,32 46 movd mm4,DWORD [20+edx] 47 pmuludq mm4,mm0 48 paddq mm1,mm3 49 movd mm6,DWORD [24+edx] 50 pmuludq mm6,mm0 51 movd DWORD [4+eax],mm1 52 psrlq mm1,32 53 movd mm3,DWORD [28+edx] 54 add edx,32 55 pmuludq mm3,mm0 56 paddq mm1,mm5 57 movd mm5,DWORD [16+eax] 58 paddq mm2,mm5 59 movd DWORD [8+eax],mm1 60 psrlq mm1,32 61 paddq mm1,mm7 62 movd mm5,DWORD [20+eax] 63 paddq mm4,mm5 64 movd DWORD [12+eax],mm1 65 psrlq mm1,32 66 paddq mm1,mm2 67 movd mm5,DWORD [24+eax] 68 paddq mm6,mm5 69 movd DWORD [16+eax],mm1 70 psrlq mm1,32 71 paddq mm1,mm4 72 movd mm5,DWORD [28+eax] 73 paddq mm3,mm5 74 movd DWORD [20+eax],mm1 75 psrlq mm1,32 76 paddq mm1,mm6 77 movd DWORD [24+eax],mm1 78 psrlq mm1,32 79 paddq mm1,mm3 80 movd DWORD [28+eax],mm1 81 lea eax,[32+eax] 82 psrlq mm1,32 83 sub ecx,8 84 jz NEAR L$003maw_sse2_exit 85L$001maw_sse2_entry: 86 test ecx,4294967288 87 jnz NEAR L$002maw_sse2_unrolled 88align 4 89L$004maw_sse2_loop: 90 movd mm2,DWORD [edx] 91 movd mm3,DWORD [eax] 92 pmuludq mm2,mm0 93 lea edx,[4+edx] 94 paddq mm1,mm3 95 paddq mm1,mm2 96 movd DWORD [eax],mm1 97 sub ecx,1 98 psrlq mm1,32 99 lea eax,[4+eax] 100 jnz NEAR L$004maw_sse2_loop 101L$003maw_sse2_exit: 102 movd eax,mm1 103 emms 104 ret 105align 16 106L$000maw_non_sse2: 107 push ebp 108 push ebx 109 push esi 110 push edi 111 ; 112 xor esi,esi 113 mov edi,DWORD [20+esp] 114 mov ecx,DWORD [28+esp] 115 mov ebx,DWORD [24+esp] 116 and ecx,4294967288 117 mov ebp,DWORD [32+esp] 118 push ecx 119 jz NEAR L$005maw_finish 120align 16 121L$006maw_loop: 122 ; Round 0 123 mov eax,DWORD [ebx] 124 mul ebp 125 add eax,esi 126 adc edx,0 127 add eax,DWORD [edi] 128 adc edx,0 129 mov DWORD [edi],eax 130 mov esi,edx 131 ; Round 4 132 mov eax,DWORD [4+ebx] 133 mul ebp 134 add eax,esi 135 adc edx,0 136 add eax,DWORD [4+edi] 137 adc edx,0 138 mov DWORD [4+edi],eax 139 mov esi,edx 140 ; Round 8 141 mov eax,DWORD [8+ebx] 142 mul ebp 143 add eax,esi 144 adc edx,0 145 add eax,DWORD [8+edi] 146 adc edx,0 147 mov DWORD [8+edi],eax 148 mov esi,edx 149 ; Round 12 150 mov eax,DWORD [12+ebx] 151 mul ebp 152 add eax,esi 153 adc edx,0 154 add eax,DWORD [12+edi] 155 adc edx,0 156 mov DWORD [12+edi],eax 157 mov esi,edx 158 ; Round 16 159 mov eax,DWORD [16+ebx] 160 mul ebp 161 add eax,esi 162 adc edx,0 163 add eax,DWORD [16+edi] 164 adc edx,0 165 mov DWORD [16+edi],eax 166 mov esi,edx 167 ; Round 20 168 mov eax,DWORD [20+ebx] 169 mul ebp 170 add eax,esi 171 adc edx,0 172 add eax,DWORD [20+edi] 173 adc edx,0 174 mov DWORD [20+edi],eax 175 mov esi,edx 176 ; Round 24 177 mov eax,DWORD [24+ebx] 178 mul ebp 179 add eax,esi 180 adc edx,0 181 add eax,DWORD [24+edi] 182 adc edx,0 183 mov DWORD [24+edi],eax 184 mov esi,edx 185 ; Round 28 186 mov eax,DWORD [28+ebx] 187 mul ebp 188 add eax,esi 189 adc edx,0 190 add eax,DWORD [28+edi] 191 adc edx,0 192 mov DWORD [28+edi],eax 193 mov esi,edx 194 ; 195 sub ecx,8 196 lea ebx,[32+ebx] 197 lea edi,[32+edi] 198 jnz NEAR L$006maw_loop 199L$005maw_finish: 200 mov ecx,DWORD [32+esp] 201 and ecx,7 202 jnz NEAR L$007maw_finish2 203 jmp NEAR L$008maw_end 204L$007maw_finish2: 205 ; Tail Round 0 206 mov eax,DWORD [ebx] 207 mul ebp 208 add eax,esi 209 adc edx,0 210 add eax,DWORD [edi] 211 adc edx,0 212 dec ecx 213 mov DWORD [edi],eax 214 mov esi,edx 215 jz NEAR L$008maw_end 216 ; Tail Round 1 217 mov eax,DWORD [4+ebx] 218 mul ebp 219 add eax,esi 220 adc edx,0 221 add eax,DWORD [4+edi] 222 adc edx,0 223 dec ecx 224 mov DWORD [4+edi],eax 225 mov esi,edx 226 jz NEAR L$008maw_end 227 ; Tail Round 2 228 mov eax,DWORD [8+ebx] 229 mul ebp 230 add eax,esi 231 adc edx,0 232 add eax,DWORD [8+edi] 233 adc edx,0 234 dec ecx 235 mov DWORD [8+edi],eax 236 mov esi,edx 237 jz NEAR L$008maw_end 238 ; Tail Round 3 239 mov eax,DWORD [12+ebx] 240 mul ebp 241 add eax,esi 242 adc edx,0 243 add eax,DWORD [12+edi] 244 adc edx,0 245 dec ecx 246 mov DWORD [12+edi],eax 247 mov esi,edx 248 jz NEAR L$008maw_end 249 ; Tail Round 4 250 mov eax,DWORD [16+ebx] 251 mul ebp 252 add eax,esi 253 adc edx,0 254 add eax,DWORD [16+edi] 255 adc edx,0 256 dec ecx 257 mov DWORD [16+edi],eax 258 mov esi,edx 259 jz NEAR L$008maw_end 260 ; Tail Round 5 261 mov eax,DWORD [20+ebx] 262 mul ebp 263 add eax,esi 264 adc edx,0 265 add eax,DWORD [20+edi] 266 adc edx,0 267 dec ecx 268 mov DWORD [20+edi],eax 269 mov esi,edx 270 jz NEAR L$008maw_end 271 ; Tail Round 6 272 mov eax,DWORD [24+ebx] 273 mul ebp 274 add eax,esi 275 adc edx,0 276 add eax,DWORD [24+edi] 277 adc edx,0 278 mov DWORD [24+edi],eax 279 mov esi,edx 280L$008maw_end: 281 mov eax,esi 282 pop ecx 283 pop edi 284 pop esi 285 pop ebx 286 pop ebp 287 ret 288global _bn_mul_words 289align 16 290_bn_mul_words: 291L$_bn_mul_words_begin: 292 lea eax,[_OPENSSL_ia32cap_P] 293 bt DWORD [eax],26 294 jnc NEAR L$009mw_non_sse2 295 mov eax,DWORD [4+esp] 296 mov edx,DWORD [8+esp] 297 mov ecx,DWORD [12+esp] 298 movd mm0,DWORD [16+esp] 299 pxor mm1,mm1 300align 16 301L$010mw_sse2_loop: 302 movd mm2,DWORD [edx] 303 pmuludq mm2,mm0 304 lea edx,[4+edx] 305 paddq mm1,mm2 306 movd DWORD [eax],mm1 307 sub ecx,1 308 psrlq mm1,32 309 lea eax,[4+eax] 310 jnz NEAR L$010mw_sse2_loop 311 movd eax,mm1 312 emms 313 ret 314align 16 315L$009mw_non_sse2: 316 push ebp 317 push ebx 318 push esi 319 push edi 320 ; 321 xor esi,esi 322 mov edi,DWORD [20+esp] 323 mov ebx,DWORD [24+esp] 324 mov ebp,DWORD [28+esp] 325 mov ecx,DWORD [32+esp] 326 and ebp,4294967288 327 jz NEAR L$011mw_finish 328L$012mw_loop: 329 ; Round 0 330 mov eax,DWORD [ebx] 331 mul ecx 332 add eax,esi 333 adc edx,0 334 mov DWORD [edi],eax 335 mov esi,edx 336 ; Round 4 337 mov eax,DWORD [4+ebx] 338 mul ecx 339 add eax,esi 340 adc edx,0 341 mov DWORD [4+edi],eax 342 mov esi,edx 343 ; Round 8 344 mov eax,DWORD [8+ebx] 345 mul ecx 346 add eax,esi 347 adc edx,0 348 mov DWORD [8+edi],eax 349 mov esi,edx 350 ; Round 12 351 mov eax,DWORD [12+ebx] 352 mul ecx 353 add eax,esi 354 adc edx,0 355 mov DWORD [12+edi],eax 356 mov esi,edx 357 ; Round 16 358 mov eax,DWORD [16+ebx] 359 mul ecx 360 add eax,esi 361 adc edx,0 362 mov DWORD [16+edi],eax 363 mov esi,edx 364 ; Round 20 365 mov eax,DWORD [20+ebx] 366 mul ecx 367 add eax,esi 368 adc edx,0 369 mov DWORD [20+edi],eax 370 mov esi,edx 371 ; Round 24 372 mov eax,DWORD [24+ebx] 373 mul ecx 374 add eax,esi 375 adc edx,0 376 mov DWORD [24+edi],eax 377 mov esi,edx 378 ; Round 28 379 mov eax,DWORD [28+ebx] 380 mul ecx 381 add eax,esi 382 adc edx,0 383 mov DWORD [28+edi],eax 384 mov esi,edx 385 ; 386 add ebx,32 387 add edi,32 388 sub ebp,8 389 jz NEAR L$011mw_finish 390 jmp NEAR L$012mw_loop 391L$011mw_finish: 392 mov ebp,DWORD [28+esp] 393 and ebp,7 394 jnz NEAR L$013mw_finish2 395 jmp NEAR L$014mw_end 396L$013mw_finish2: 397 ; Tail Round 0 398 mov eax,DWORD [ebx] 399 mul ecx 400 add eax,esi 401 adc edx,0 402 mov DWORD [edi],eax 403 mov esi,edx 404 dec ebp 405 jz NEAR L$014mw_end 406 ; Tail Round 1 407 mov eax,DWORD [4+ebx] 408 mul ecx 409 add eax,esi 410 adc edx,0 411 mov DWORD [4+edi],eax 412 mov esi,edx 413 dec ebp 414 jz NEAR L$014mw_end 415 ; Tail Round 2 416 mov eax,DWORD [8+ebx] 417 mul ecx 418 add eax,esi 419 adc edx,0 420 mov DWORD [8+edi],eax 421 mov esi,edx 422 dec ebp 423 jz NEAR L$014mw_end 424 ; Tail Round 3 425 mov eax,DWORD [12+ebx] 426 mul ecx 427 add eax,esi 428 adc edx,0 429 mov DWORD [12+edi],eax 430 mov esi,edx 431 dec ebp 432 jz NEAR L$014mw_end 433 ; Tail Round 4 434 mov eax,DWORD [16+ebx] 435 mul ecx 436 add eax,esi 437 adc edx,0 438 mov DWORD [16+edi],eax 439 mov esi,edx 440 dec ebp 441 jz NEAR L$014mw_end 442 ; Tail Round 5 443 mov eax,DWORD [20+ebx] 444 mul ecx 445 add eax,esi 446 adc edx,0 447 mov DWORD [20+edi],eax 448 mov esi,edx 449 dec ebp 450 jz NEAR L$014mw_end 451 ; Tail Round 6 452 mov eax,DWORD [24+ebx] 453 mul ecx 454 add eax,esi 455 adc edx,0 456 mov DWORD [24+edi],eax 457 mov esi,edx 458L$014mw_end: 459 mov eax,esi 460 pop edi 461 pop esi 462 pop ebx 463 pop ebp 464 ret 465global _bn_sqr_words 466align 16 467_bn_sqr_words: 468L$_bn_sqr_words_begin: 469 lea eax,[_OPENSSL_ia32cap_P] 470 bt DWORD [eax],26 471 jnc NEAR L$015sqr_non_sse2 472 mov eax,DWORD [4+esp] 473 mov edx,DWORD [8+esp] 474 mov ecx,DWORD [12+esp] 475align 16 476L$016sqr_sse2_loop: 477 movd mm0,DWORD [edx] 478 pmuludq mm0,mm0 479 lea edx,[4+edx] 480 movq [eax],mm0 481 sub ecx,1 482 lea eax,[8+eax] 483 jnz NEAR L$016sqr_sse2_loop 484 emms 485 ret 486align 16 487L$015sqr_non_sse2: 488 push ebp 489 push ebx 490 push esi 491 push edi 492 ; 493 mov esi,DWORD [20+esp] 494 mov edi,DWORD [24+esp] 495 mov ebx,DWORD [28+esp] 496 and ebx,4294967288 497 jz NEAR L$017sw_finish 498L$018sw_loop: 499 ; Round 0 500 mov eax,DWORD [edi] 501 mul eax 502 mov DWORD [esi],eax 503 mov DWORD [4+esi],edx 504 ; Round 4 505 mov eax,DWORD [4+edi] 506 mul eax 507 mov DWORD [8+esi],eax 508 mov DWORD [12+esi],edx 509 ; Round 8 510 mov eax,DWORD [8+edi] 511 mul eax 512 mov DWORD [16+esi],eax 513 mov DWORD [20+esi],edx 514 ; Round 12 515 mov eax,DWORD [12+edi] 516 mul eax 517 mov DWORD [24+esi],eax 518 mov DWORD [28+esi],edx 519 ; Round 16 520 mov eax,DWORD [16+edi] 521 mul eax 522 mov DWORD [32+esi],eax 523 mov DWORD [36+esi],edx 524 ; Round 20 525 mov eax,DWORD [20+edi] 526 mul eax 527 mov DWORD [40+esi],eax 528 mov DWORD [44+esi],edx 529 ; Round 24 530 mov eax,DWORD [24+edi] 531 mul eax 532 mov DWORD [48+esi],eax 533 mov DWORD [52+esi],edx 534 ; Round 28 535 mov eax,DWORD [28+edi] 536 mul eax 537 mov DWORD [56+esi],eax 538 mov DWORD [60+esi],edx 539 ; 540 add edi,32 541 add esi,64 542 sub ebx,8 543 jnz NEAR L$018sw_loop 544L$017sw_finish: 545 mov ebx,DWORD [28+esp] 546 and ebx,7 547 jz NEAR L$019sw_end 548 ; Tail Round 0 549 mov eax,DWORD [edi] 550 mul eax 551 mov DWORD [esi],eax 552 dec ebx 553 mov DWORD [4+esi],edx 554 jz NEAR L$019sw_end 555 ; Tail Round 1 556 mov eax,DWORD [4+edi] 557 mul eax 558 mov DWORD [8+esi],eax 559 dec ebx 560 mov DWORD [12+esi],edx 561 jz NEAR L$019sw_end 562 ; Tail Round 2 563 mov eax,DWORD [8+edi] 564 mul eax 565 mov DWORD [16+esi],eax 566 dec ebx 567 mov DWORD [20+esi],edx 568 jz NEAR L$019sw_end 569 ; Tail Round 3 570 mov eax,DWORD [12+edi] 571 mul eax 572 mov DWORD [24+esi],eax 573 dec ebx 574 mov DWORD [28+esi],edx 575 jz NEAR L$019sw_end 576 ; Tail Round 4 577 mov eax,DWORD [16+edi] 578 mul eax 579 mov DWORD [32+esi],eax 580 dec ebx 581 mov DWORD [36+esi],edx 582 jz NEAR L$019sw_end 583 ; Tail Round 5 584 mov eax,DWORD [20+edi] 585 mul eax 586 mov DWORD [40+esi],eax 587 dec ebx 588 mov DWORD [44+esi],edx 589 jz NEAR L$019sw_end 590 ; Tail Round 6 591 mov eax,DWORD [24+edi] 592 mul eax 593 mov DWORD [48+esi],eax 594 mov DWORD [52+esi],edx 595L$019sw_end: 596 pop edi 597 pop esi 598 pop ebx 599 pop ebp 600 ret 601global _bn_div_words 602align 16 603_bn_div_words: 604L$_bn_div_words_begin: 605 mov edx,DWORD [4+esp] 606 mov eax,DWORD [8+esp] 607 mov ecx,DWORD [12+esp] 608 div ecx 609 ret 610global _bn_add_words 611align 16 612_bn_add_words: 613L$_bn_add_words_begin: 614 push ebp 615 push ebx 616 push esi 617 push edi 618 ; 619 mov ebx,DWORD [20+esp] 620 mov esi,DWORD [24+esp] 621 mov edi,DWORD [28+esp] 622 mov ebp,DWORD [32+esp] 623 xor eax,eax 624 and ebp,4294967288 625 jz NEAR L$020aw_finish 626L$021aw_loop: 627 ; Round 0 628 mov ecx,DWORD [esi] 629 mov edx,DWORD [edi] 630 add ecx,eax 631 mov eax,0 632 adc eax,eax 633 add ecx,edx 634 adc eax,0 635 mov DWORD [ebx],ecx 636 ; Round 1 637 mov ecx,DWORD [4+esi] 638 mov edx,DWORD [4+edi] 639 add ecx,eax 640 mov eax,0 641 adc eax,eax 642 add ecx,edx 643 adc eax,0 644 mov DWORD [4+ebx],ecx 645 ; Round 2 646 mov ecx,DWORD [8+esi] 647 mov edx,DWORD [8+edi] 648 add ecx,eax 649 mov eax,0 650 adc eax,eax 651 add ecx,edx 652 adc eax,0 653 mov DWORD [8+ebx],ecx 654 ; Round 3 655 mov ecx,DWORD [12+esi] 656 mov edx,DWORD [12+edi] 657 add ecx,eax 658 mov eax,0 659 adc eax,eax 660 add ecx,edx 661 adc eax,0 662 mov DWORD [12+ebx],ecx 663 ; Round 4 664 mov ecx,DWORD [16+esi] 665 mov edx,DWORD [16+edi] 666 add ecx,eax 667 mov eax,0 668 adc eax,eax 669 add ecx,edx 670 adc eax,0 671 mov DWORD [16+ebx],ecx 672 ; Round 5 673 mov ecx,DWORD [20+esi] 674 mov edx,DWORD [20+edi] 675 add ecx,eax 676 mov eax,0 677 adc eax,eax 678 add ecx,edx 679 adc eax,0 680 mov DWORD [20+ebx],ecx 681 ; Round 6 682 mov ecx,DWORD [24+esi] 683 mov edx,DWORD [24+edi] 684 add ecx,eax 685 mov eax,0 686 adc eax,eax 687 add ecx,edx 688 adc eax,0 689 mov DWORD [24+ebx],ecx 690 ; Round 7 691 mov ecx,DWORD [28+esi] 692 mov edx,DWORD [28+edi] 693 add ecx,eax 694 mov eax,0 695 adc eax,eax 696 add ecx,edx 697 adc eax,0 698 mov DWORD [28+ebx],ecx 699 ; 700 add esi,32 701 add edi,32 702 add ebx,32 703 sub ebp,8 704 jnz NEAR L$021aw_loop 705L$020aw_finish: 706 mov ebp,DWORD [32+esp] 707 and ebp,7 708 jz NEAR L$022aw_end 709 ; Tail Round 0 710 mov ecx,DWORD [esi] 711 mov edx,DWORD [edi] 712 add ecx,eax 713 mov eax,0 714 adc eax,eax 715 add ecx,edx 716 adc eax,0 717 dec ebp 718 mov DWORD [ebx],ecx 719 jz NEAR L$022aw_end 720 ; Tail Round 1 721 mov ecx,DWORD [4+esi] 722 mov edx,DWORD [4+edi] 723 add ecx,eax 724 mov eax,0 725 adc eax,eax 726 add ecx,edx 727 adc eax,0 728 dec ebp 729 mov DWORD [4+ebx],ecx 730 jz NEAR L$022aw_end 731 ; Tail Round 2 732 mov ecx,DWORD [8+esi] 733 mov edx,DWORD [8+edi] 734 add ecx,eax 735 mov eax,0 736 adc eax,eax 737 add ecx,edx 738 adc eax,0 739 dec ebp 740 mov DWORD [8+ebx],ecx 741 jz NEAR L$022aw_end 742 ; Tail Round 3 743 mov ecx,DWORD [12+esi] 744 mov edx,DWORD [12+edi] 745 add ecx,eax 746 mov eax,0 747 adc eax,eax 748 add ecx,edx 749 adc eax,0 750 dec ebp 751 mov DWORD [12+ebx],ecx 752 jz NEAR L$022aw_end 753 ; Tail Round 4 754 mov ecx,DWORD [16+esi] 755 mov edx,DWORD [16+edi] 756 add ecx,eax 757 mov eax,0 758 adc eax,eax 759 add ecx,edx 760 adc eax,0 761 dec ebp 762 mov DWORD [16+ebx],ecx 763 jz NEAR L$022aw_end 764 ; Tail Round 5 765 mov ecx,DWORD [20+esi] 766 mov edx,DWORD [20+edi] 767 add ecx,eax 768 mov eax,0 769 adc eax,eax 770 add ecx,edx 771 adc eax,0 772 dec ebp 773 mov DWORD [20+ebx],ecx 774 jz NEAR L$022aw_end 775 ; Tail Round 6 776 mov ecx,DWORD [24+esi] 777 mov edx,DWORD [24+edi] 778 add ecx,eax 779 mov eax,0 780 adc eax,eax 781 add ecx,edx 782 adc eax,0 783 mov DWORD [24+ebx],ecx 784L$022aw_end: 785 pop edi 786 pop esi 787 pop ebx 788 pop ebp 789 ret 790global _bn_sub_words 791align 16 792_bn_sub_words: 793L$_bn_sub_words_begin: 794 push ebp 795 push ebx 796 push esi 797 push edi 798 ; 799 mov ebx,DWORD [20+esp] 800 mov esi,DWORD [24+esp] 801 mov edi,DWORD [28+esp] 802 mov ebp,DWORD [32+esp] 803 xor eax,eax 804 and ebp,4294967288 805 jz NEAR L$023aw_finish 806L$024aw_loop: 807 ; Round 0 808 mov ecx,DWORD [esi] 809 mov edx,DWORD [edi] 810 sub ecx,eax 811 mov eax,0 812 adc eax,eax 813 sub ecx,edx 814 adc eax,0 815 mov DWORD [ebx],ecx 816 ; Round 1 817 mov ecx,DWORD [4+esi] 818 mov edx,DWORD [4+edi] 819 sub ecx,eax 820 mov eax,0 821 adc eax,eax 822 sub ecx,edx 823 adc eax,0 824 mov DWORD [4+ebx],ecx 825 ; Round 2 826 mov ecx,DWORD [8+esi] 827 mov edx,DWORD [8+edi] 828 sub ecx,eax 829 mov eax,0 830 adc eax,eax 831 sub ecx,edx 832 adc eax,0 833 mov DWORD [8+ebx],ecx 834 ; Round 3 835 mov ecx,DWORD [12+esi] 836 mov edx,DWORD [12+edi] 837 sub ecx,eax 838 mov eax,0 839 adc eax,eax 840 sub ecx,edx 841 adc eax,0 842 mov DWORD [12+ebx],ecx 843 ; Round 4 844 mov ecx,DWORD [16+esi] 845 mov edx,DWORD [16+edi] 846 sub ecx,eax 847 mov eax,0 848 adc eax,eax 849 sub ecx,edx 850 adc eax,0 851 mov DWORD [16+ebx],ecx 852 ; Round 5 853 mov ecx,DWORD [20+esi] 854 mov edx,DWORD [20+edi] 855 sub ecx,eax 856 mov eax,0 857 adc eax,eax 858 sub ecx,edx 859 adc eax,0 860 mov DWORD [20+ebx],ecx 861 ; Round 6 862 mov ecx,DWORD [24+esi] 863 mov edx,DWORD [24+edi] 864 sub ecx,eax 865 mov eax,0 866 adc eax,eax 867 sub ecx,edx 868 adc eax,0 869 mov DWORD [24+ebx],ecx 870 ; Round 7 871 mov ecx,DWORD [28+esi] 872 mov edx,DWORD [28+edi] 873 sub ecx,eax 874 mov eax,0 875 adc eax,eax 876 sub ecx,edx 877 adc eax,0 878 mov DWORD [28+ebx],ecx 879 ; 880 add esi,32 881 add edi,32 882 add ebx,32 883 sub ebp,8 884 jnz NEAR L$024aw_loop 885L$023aw_finish: 886 mov ebp,DWORD [32+esp] 887 and ebp,7 888 jz NEAR L$025aw_end 889 ; Tail Round 0 890 mov ecx,DWORD [esi] 891 mov edx,DWORD [edi] 892 sub ecx,eax 893 mov eax,0 894 adc eax,eax 895 sub ecx,edx 896 adc eax,0 897 dec ebp 898 mov DWORD [ebx],ecx 899 jz NEAR L$025aw_end 900 ; Tail Round 1 901 mov ecx,DWORD [4+esi] 902 mov edx,DWORD [4+edi] 903 sub ecx,eax 904 mov eax,0 905 adc eax,eax 906 sub ecx,edx 907 adc eax,0 908 dec ebp 909 mov DWORD [4+ebx],ecx 910 jz NEAR L$025aw_end 911 ; Tail Round 2 912 mov ecx,DWORD [8+esi] 913 mov edx,DWORD [8+edi] 914 sub ecx,eax 915 mov eax,0 916 adc eax,eax 917 sub ecx,edx 918 adc eax,0 919 dec ebp 920 mov DWORD [8+ebx],ecx 921 jz NEAR L$025aw_end 922 ; Tail Round 3 923 mov ecx,DWORD [12+esi] 924 mov edx,DWORD [12+edi] 925 sub ecx,eax 926 mov eax,0 927 adc eax,eax 928 sub ecx,edx 929 adc eax,0 930 dec ebp 931 mov DWORD [12+ebx],ecx 932 jz NEAR L$025aw_end 933 ; Tail Round 4 934 mov ecx,DWORD [16+esi] 935 mov edx,DWORD [16+edi] 936 sub ecx,eax 937 mov eax,0 938 adc eax,eax 939 sub ecx,edx 940 adc eax,0 941 dec ebp 942 mov DWORD [16+ebx],ecx 943 jz NEAR L$025aw_end 944 ; Tail Round 5 945 mov ecx,DWORD [20+esi] 946 mov edx,DWORD [20+edi] 947 sub ecx,eax 948 mov eax,0 949 adc eax,eax 950 sub ecx,edx 951 adc eax,0 952 dec ebp 953 mov DWORD [20+ebx],ecx 954 jz NEAR L$025aw_end 955 ; Tail Round 6 956 mov ecx,DWORD [24+esi] 957 mov edx,DWORD [24+edi] 958 sub ecx,eax 959 mov eax,0 960 adc eax,eax 961 sub ecx,edx 962 adc eax,0 963 mov DWORD [24+ebx],ecx 964L$025aw_end: 965 pop edi 966 pop esi 967 pop ebx 968 pop ebp 969 ret 970global _bn_sub_part_words 971align 16 972_bn_sub_part_words: 973L$_bn_sub_part_words_begin: 974 push ebp 975 push ebx 976 push esi 977 push edi 978 ; 979 mov ebx,DWORD [20+esp] 980 mov esi,DWORD [24+esp] 981 mov edi,DWORD [28+esp] 982 mov ebp,DWORD [32+esp] 983 xor eax,eax 984 and ebp,4294967288 985 jz NEAR L$026aw_finish 986L$027aw_loop: 987 ; Round 0 988 mov ecx,DWORD [esi] 989 mov edx,DWORD [edi] 990 sub ecx,eax 991 mov eax,0 992 adc eax,eax 993 sub ecx,edx 994 adc eax,0 995 mov DWORD [ebx],ecx 996 ; Round 1 997 mov ecx,DWORD [4+esi] 998 mov edx,DWORD [4+edi] 999 sub ecx,eax 1000 mov eax,0 1001 adc eax,eax 1002 sub ecx,edx 1003 adc eax,0 1004 mov DWORD [4+ebx],ecx 1005 ; Round 2 1006 mov ecx,DWORD [8+esi] 1007 mov edx,DWORD [8+edi] 1008 sub ecx,eax 1009 mov eax,0 1010 adc eax,eax 1011 sub ecx,edx 1012 adc eax,0 1013 mov DWORD [8+ebx],ecx 1014 ; Round 3 1015 mov ecx,DWORD [12+esi] 1016 mov edx,DWORD [12+edi] 1017 sub ecx,eax 1018 mov eax,0 1019 adc eax,eax 1020 sub ecx,edx 1021 adc eax,0 1022 mov DWORD [12+ebx],ecx 1023 ; Round 4 1024 mov ecx,DWORD [16+esi] 1025 mov edx,DWORD [16+edi] 1026 sub ecx,eax 1027 mov eax,0 1028 adc eax,eax 1029 sub ecx,edx 1030 adc eax,0 1031 mov DWORD [16+ebx],ecx 1032 ; Round 5 1033 mov ecx,DWORD [20+esi] 1034 mov edx,DWORD [20+edi] 1035 sub ecx,eax 1036 mov eax,0 1037 adc eax,eax 1038 sub ecx,edx 1039 adc eax,0 1040 mov DWORD [20+ebx],ecx 1041 ; Round 6 1042 mov ecx,DWORD [24+esi] 1043 mov edx,DWORD [24+edi] 1044 sub ecx,eax 1045 mov eax,0 1046 adc eax,eax 1047 sub ecx,edx 1048 adc eax,0 1049 mov DWORD [24+ebx],ecx 1050 ; Round 7 1051 mov ecx,DWORD [28+esi] 1052 mov edx,DWORD [28+edi] 1053 sub ecx,eax 1054 mov eax,0 1055 adc eax,eax 1056 sub ecx,edx 1057 adc eax,0 1058 mov DWORD [28+ebx],ecx 1059 ; 1060 add esi,32 1061 add edi,32 1062 add ebx,32 1063 sub ebp,8 1064 jnz NEAR L$027aw_loop 1065L$026aw_finish: 1066 mov ebp,DWORD [32+esp] 1067 and ebp,7 1068 jz NEAR L$028aw_end 1069 ; Tail Round 0 1070 mov ecx,DWORD [esi] 1071 mov edx,DWORD [edi] 1072 sub ecx,eax 1073 mov eax,0 1074 adc eax,eax 1075 sub ecx,edx 1076 adc eax,0 1077 mov DWORD [ebx],ecx 1078 add esi,4 1079 add edi,4 1080 add ebx,4 1081 dec ebp 1082 jz NEAR L$028aw_end 1083 ; Tail Round 1 1084 mov ecx,DWORD [esi] 1085 mov edx,DWORD [edi] 1086 sub ecx,eax 1087 mov eax,0 1088 adc eax,eax 1089 sub ecx,edx 1090 adc eax,0 1091 mov DWORD [ebx],ecx 1092 add esi,4 1093 add edi,4 1094 add ebx,4 1095 dec ebp 1096 jz NEAR L$028aw_end 1097 ; Tail Round 2 1098 mov ecx,DWORD [esi] 1099 mov edx,DWORD [edi] 1100 sub ecx,eax 1101 mov eax,0 1102 adc eax,eax 1103 sub ecx,edx 1104 adc eax,0 1105 mov DWORD [ebx],ecx 1106 add esi,4 1107 add edi,4 1108 add ebx,4 1109 dec ebp 1110 jz NEAR L$028aw_end 1111 ; Tail Round 3 1112 mov ecx,DWORD [esi] 1113 mov edx,DWORD [edi] 1114 sub ecx,eax 1115 mov eax,0 1116 adc eax,eax 1117 sub ecx,edx 1118 adc eax,0 1119 mov DWORD [ebx],ecx 1120 add esi,4 1121 add edi,4 1122 add ebx,4 1123 dec ebp 1124 jz NEAR L$028aw_end 1125 ; Tail Round 4 1126 mov ecx,DWORD [esi] 1127 mov edx,DWORD [edi] 1128 sub ecx,eax 1129 mov eax,0 1130 adc eax,eax 1131 sub ecx,edx 1132 adc eax,0 1133 mov DWORD [ebx],ecx 1134 add esi,4 1135 add edi,4 1136 add ebx,4 1137 dec ebp 1138 jz NEAR L$028aw_end 1139 ; Tail Round 5 1140 mov ecx,DWORD [esi] 1141 mov edx,DWORD [edi] 1142 sub ecx,eax 1143 mov eax,0 1144 adc eax,eax 1145 sub ecx,edx 1146 adc eax,0 1147 mov DWORD [ebx],ecx 1148 add esi,4 1149 add edi,4 1150 add ebx,4 1151 dec ebp 1152 jz NEAR L$028aw_end 1153 ; Tail Round 6 1154 mov ecx,DWORD [esi] 1155 mov edx,DWORD [edi] 1156 sub ecx,eax 1157 mov eax,0 1158 adc eax,eax 1159 sub ecx,edx 1160 adc eax,0 1161 mov DWORD [ebx],ecx 1162 add esi,4 1163 add edi,4 1164 add ebx,4 1165L$028aw_end: 1166 cmp DWORD [36+esp],0 1167 je NEAR L$029pw_end 1168 mov ebp,DWORD [36+esp] 1169 cmp ebp,0 1170 je NEAR L$029pw_end 1171 jge NEAR L$030pw_pos 1172 ; pw_neg 1173 mov edx,0 1174 sub edx,ebp 1175 mov ebp,edx 1176 and ebp,4294967288 1177 jz NEAR L$031pw_neg_finish 1178L$032pw_neg_loop: 1179 ; dl<0 Round 0 1180 mov ecx,0 1181 mov edx,DWORD [edi] 1182 sub ecx,eax 1183 mov eax,0 1184 adc eax,eax 1185 sub ecx,edx 1186 adc eax,0 1187 mov DWORD [ebx],ecx 1188 ; dl<0 Round 1 1189 mov ecx,0 1190 mov edx,DWORD [4+edi] 1191 sub ecx,eax 1192 mov eax,0 1193 adc eax,eax 1194 sub ecx,edx 1195 adc eax,0 1196 mov DWORD [4+ebx],ecx 1197 ; dl<0 Round 2 1198 mov ecx,0 1199 mov edx,DWORD [8+edi] 1200 sub ecx,eax 1201 mov eax,0 1202 adc eax,eax 1203 sub ecx,edx 1204 adc eax,0 1205 mov DWORD [8+ebx],ecx 1206 ; dl<0 Round 3 1207 mov ecx,0 1208 mov edx,DWORD [12+edi] 1209 sub ecx,eax 1210 mov eax,0 1211 adc eax,eax 1212 sub ecx,edx 1213 adc eax,0 1214 mov DWORD [12+ebx],ecx 1215 ; dl<0 Round 4 1216 mov ecx,0 1217 mov edx,DWORD [16+edi] 1218 sub ecx,eax 1219 mov eax,0 1220 adc eax,eax 1221 sub ecx,edx 1222 adc eax,0 1223 mov DWORD [16+ebx],ecx 1224 ; dl<0 Round 5 1225 mov ecx,0 1226 mov edx,DWORD [20+edi] 1227 sub ecx,eax 1228 mov eax,0 1229 adc eax,eax 1230 sub ecx,edx 1231 adc eax,0 1232 mov DWORD [20+ebx],ecx 1233 ; dl<0 Round 6 1234 mov ecx,0 1235 mov edx,DWORD [24+edi] 1236 sub ecx,eax 1237 mov eax,0 1238 adc eax,eax 1239 sub ecx,edx 1240 adc eax,0 1241 mov DWORD [24+ebx],ecx 1242 ; dl<0 Round 7 1243 mov ecx,0 1244 mov edx,DWORD [28+edi] 1245 sub ecx,eax 1246 mov eax,0 1247 adc eax,eax 1248 sub ecx,edx 1249 adc eax,0 1250 mov DWORD [28+ebx],ecx 1251 ; 1252 add edi,32 1253 add ebx,32 1254 sub ebp,8 1255 jnz NEAR L$032pw_neg_loop 1256L$031pw_neg_finish: 1257 mov edx,DWORD [36+esp] 1258 mov ebp,0 1259 sub ebp,edx 1260 and ebp,7 1261 jz NEAR L$029pw_end 1262 ; dl<0 Tail Round 0 1263 mov ecx,0 1264 mov edx,DWORD [edi] 1265 sub ecx,eax 1266 mov eax,0 1267 adc eax,eax 1268 sub ecx,edx 1269 adc eax,0 1270 dec ebp 1271 mov DWORD [ebx],ecx 1272 jz NEAR L$029pw_end 1273 ; dl<0 Tail Round 1 1274 mov ecx,0 1275 mov edx,DWORD [4+edi] 1276 sub ecx,eax 1277 mov eax,0 1278 adc eax,eax 1279 sub ecx,edx 1280 adc eax,0 1281 dec ebp 1282 mov DWORD [4+ebx],ecx 1283 jz NEAR L$029pw_end 1284 ; dl<0 Tail Round 2 1285 mov ecx,0 1286 mov edx,DWORD [8+edi] 1287 sub ecx,eax 1288 mov eax,0 1289 adc eax,eax 1290 sub ecx,edx 1291 adc eax,0 1292 dec ebp 1293 mov DWORD [8+ebx],ecx 1294 jz NEAR L$029pw_end 1295 ; dl<0 Tail Round 3 1296 mov ecx,0 1297 mov edx,DWORD [12+edi] 1298 sub ecx,eax 1299 mov eax,0 1300 adc eax,eax 1301 sub ecx,edx 1302 adc eax,0 1303 dec ebp 1304 mov DWORD [12+ebx],ecx 1305 jz NEAR L$029pw_end 1306 ; dl<0 Tail Round 4 1307 mov ecx,0 1308 mov edx,DWORD [16+edi] 1309 sub ecx,eax 1310 mov eax,0 1311 adc eax,eax 1312 sub ecx,edx 1313 adc eax,0 1314 dec ebp 1315 mov DWORD [16+ebx],ecx 1316 jz NEAR L$029pw_end 1317 ; dl<0 Tail Round 5 1318 mov ecx,0 1319 mov edx,DWORD [20+edi] 1320 sub ecx,eax 1321 mov eax,0 1322 adc eax,eax 1323 sub ecx,edx 1324 adc eax,0 1325 dec ebp 1326 mov DWORD [20+ebx],ecx 1327 jz NEAR L$029pw_end 1328 ; dl<0 Tail Round 6 1329 mov ecx,0 1330 mov edx,DWORD [24+edi] 1331 sub ecx,eax 1332 mov eax,0 1333 adc eax,eax 1334 sub ecx,edx 1335 adc eax,0 1336 mov DWORD [24+ebx],ecx 1337 jmp NEAR L$029pw_end 1338L$030pw_pos: 1339 and ebp,4294967288 1340 jz NEAR L$033pw_pos_finish 1341L$034pw_pos_loop: 1342 ; dl>0 Round 0 1343 mov ecx,DWORD [esi] 1344 sub ecx,eax 1345 mov DWORD [ebx],ecx 1346 jnc NEAR L$035pw_nc0 1347 ; dl>0 Round 1 1348 mov ecx,DWORD [4+esi] 1349 sub ecx,eax 1350 mov DWORD [4+ebx],ecx 1351 jnc NEAR L$036pw_nc1 1352 ; dl>0 Round 2 1353 mov ecx,DWORD [8+esi] 1354 sub ecx,eax 1355 mov DWORD [8+ebx],ecx 1356 jnc NEAR L$037pw_nc2 1357 ; dl>0 Round 3 1358 mov ecx,DWORD [12+esi] 1359 sub ecx,eax 1360 mov DWORD [12+ebx],ecx 1361 jnc NEAR L$038pw_nc3 1362 ; dl>0 Round 4 1363 mov ecx,DWORD [16+esi] 1364 sub ecx,eax 1365 mov DWORD [16+ebx],ecx 1366 jnc NEAR L$039pw_nc4 1367 ; dl>0 Round 5 1368 mov ecx,DWORD [20+esi] 1369 sub ecx,eax 1370 mov DWORD [20+ebx],ecx 1371 jnc NEAR L$040pw_nc5 1372 ; dl>0 Round 6 1373 mov ecx,DWORD [24+esi] 1374 sub ecx,eax 1375 mov DWORD [24+ebx],ecx 1376 jnc NEAR L$041pw_nc6 1377 ; dl>0 Round 7 1378 mov ecx,DWORD [28+esi] 1379 sub ecx,eax 1380 mov DWORD [28+ebx],ecx 1381 jnc NEAR L$042pw_nc7 1382 ; 1383 add esi,32 1384 add ebx,32 1385 sub ebp,8 1386 jnz NEAR L$034pw_pos_loop 1387L$033pw_pos_finish: 1388 mov ebp,DWORD [36+esp] 1389 and ebp,7 1390 jz NEAR L$029pw_end 1391 ; dl>0 Tail Round 0 1392 mov ecx,DWORD [esi] 1393 sub ecx,eax 1394 mov DWORD [ebx],ecx 1395 jnc NEAR L$043pw_tail_nc0 1396 dec ebp 1397 jz NEAR L$029pw_end 1398 ; dl>0 Tail Round 1 1399 mov ecx,DWORD [4+esi] 1400 sub ecx,eax 1401 mov DWORD [4+ebx],ecx 1402 jnc NEAR L$044pw_tail_nc1 1403 dec ebp 1404 jz NEAR L$029pw_end 1405 ; dl>0 Tail Round 2 1406 mov ecx,DWORD [8+esi] 1407 sub ecx,eax 1408 mov DWORD [8+ebx],ecx 1409 jnc NEAR L$045pw_tail_nc2 1410 dec ebp 1411 jz NEAR L$029pw_end 1412 ; dl>0 Tail Round 3 1413 mov ecx,DWORD [12+esi] 1414 sub ecx,eax 1415 mov DWORD [12+ebx],ecx 1416 jnc NEAR L$046pw_tail_nc3 1417 dec ebp 1418 jz NEAR L$029pw_end 1419 ; dl>0 Tail Round 4 1420 mov ecx,DWORD [16+esi] 1421 sub ecx,eax 1422 mov DWORD [16+ebx],ecx 1423 jnc NEAR L$047pw_tail_nc4 1424 dec ebp 1425 jz NEAR L$029pw_end 1426 ; dl>0 Tail Round 5 1427 mov ecx,DWORD [20+esi] 1428 sub ecx,eax 1429 mov DWORD [20+ebx],ecx 1430 jnc NEAR L$048pw_tail_nc5 1431 dec ebp 1432 jz NEAR L$029pw_end 1433 ; dl>0 Tail Round 6 1434 mov ecx,DWORD [24+esi] 1435 sub ecx,eax 1436 mov DWORD [24+ebx],ecx 1437 jnc NEAR L$049pw_tail_nc6 1438 mov eax,1 1439 jmp NEAR L$029pw_end 1440L$050pw_nc_loop: 1441 mov ecx,DWORD [esi] 1442 mov DWORD [ebx],ecx 1443L$035pw_nc0: 1444 mov ecx,DWORD [4+esi] 1445 mov DWORD [4+ebx],ecx 1446L$036pw_nc1: 1447 mov ecx,DWORD [8+esi] 1448 mov DWORD [8+ebx],ecx 1449L$037pw_nc2: 1450 mov ecx,DWORD [12+esi] 1451 mov DWORD [12+ebx],ecx 1452L$038pw_nc3: 1453 mov ecx,DWORD [16+esi] 1454 mov DWORD [16+ebx],ecx 1455L$039pw_nc4: 1456 mov ecx,DWORD [20+esi] 1457 mov DWORD [20+ebx],ecx 1458L$040pw_nc5: 1459 mov ecx,DWORD [24+esi] 1460 mov DWORD [24+ebx],ecx 1461L$041pw_nc6: 1462 mov ecx,DWORD [28+esi] 1463 mov DWORD [28+ebx],ecx 1464L$042pw_nc7: 1465 ; 1466 add esi,32 1467 add ebx,32 1468 sub ebp,8 1469 jnz NEAR L$050pw_nc_loop 1470 mov ebp,DWORD [36+esp] 1471 and ebp,7 1472 jz NEAR L$051pw_nc_end 1473 mov ecx,DWORD [esi] 1474 mov DWORD [ebx],ecx 1475L$043pw_tail_nc0: 1476 dec ebp 1477 jz NEAR L$051pw_nc_end 1478 mov ecx,DWORD [4+esi] 1479 mov DWORD [4+ebx],ecx 1480L$044pw_tail_nc1: 1481 dec ebp 1482 jz NEAR L$051pw_nc_end 1483 mov ecx,DWORD [8+esi] 1484 mov DWORD [8+ebx],ecx 1485L$045pw_tail_nc2: 1486 dec ebp 1487 jz NEAR L$051pw_nc_end 1488 mov ecx,DWORD [12+esi] 1489 mov DWORD [12+ebx],ecx 1490L$046pw_tail_nc3: 1491 dec ebp 1492 jz NEAR L$051pw_nc_end 1493 mov ecx,DWORD [16+esi] 1494 mov DWORD [16+ebx],ecx 1495L$047pw_tail_nc4: 1496 dec ebp 1497 jz NEAR L$051pw_nc_end 1498 mov ecx,DWORD [20+esi] 1499 mov DWORD [20+ebx],ecx 1500L$048pw_tail_nc5: 1501 dec ebp 1502 jz NEAR L$051pw_nc_end 1503 mov ecx,DWORD [24+esi] 1504 mov DWORD [24+ebx],ecx 1505L$049pw_tail_nc6: 1506L$051pw_nc_end: 1507 mov eax,0 1508L$029pw_end: 1509 pop edi 1510 pop esi 1511 pop ebx 1512 pop ebp 1513 ret 1514segment .bss 1515common _OPENSSL_ia32cap_P 16 1516