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