1 .text 2 .globl _OPENSSL_ia32_cpuid 3 .type _OPENSSL_ia32_cpuid,@function 4 .align 4 5 _OPENSSL_ia32_cpuid: 6 L_OPENSSL_ia32_cpuid_begin: 7 %ifdef __CET__ 8 9 .byte 243,15,30,251 10 %endif 11 12 pushl %ebp 13 pushl %ebx 14 pushl %esi 15 pushl %edi 16 xorl %edx,%edx 17 pushfl 18 popl %eax 19 movl %eax,%ecx 20 xorl $2097152,%eax 21 pushl %eax 22 popfl 23 pushfl 24 popl %eax 25 xorl %eax,%ecx 26 xorl %eax,%eax 27 movl 20(%esp),%esi 28 movl %eax,8(%esi) 29 btl $21,%ecx 30 jnc L000nocpuid 31 .byte 0x0f,0xa2 32 movl %eax,%edi 33 xorl %eax,%eax 34 cmpl $1970169159,%ebx 35 setne %al 36 movl %eax,%ebp 37 cmpl $1231384169,%edx 38 setne %al 39 orl %eax,%ebp 40 cmpl $1818588270,%ecx 41 setne %al 42 orl %eax,%ebp 43 jz L001intel 44 cmpl $1752462657,%ebx 45 setne %al 46 movl %eax,%esi 47 cmpl $1769238117,%edx 48 setne %al 49 orl %eax,%esi 50 cmpl $1145913699,%ecx 51 setne %al 52 orl %eax,%esi 53 jnz L001intel 54 movl $2147483648,%eax 55 .byte 0x0f,0xa2 56 cmpl $2147483649,%eax 57 jb L001intel 58 movl %eax,%esi 59 movl $2147483649,%eax 60 .byte 0x0f,0xa2 61 orl %ecx,%ebp 62 andl $2049,%ebp 63 cmpl $2147483656,%esi 64 jb L001intel 65 movl $2147483656,%eax 66 .byte 0x0f,0xa2 67 movzbl %cl,%esi 68 incl %esi 69 movl $1,%eax 70 xorl %ecx,%ecx 71 .byte 0x0f,0xa2 72 btl $28,%edx 73 jnc L002generic 74 shrl $16,%ebx 75 andl $255,%ebx 76 cmpl %esi,%ebx 77 ja L002generic 78 andl $4026531839,%edx 79 jmp L002generic 80 L001intel: 81 cmpl $4,%edi 82 movl $-1,%esi 83 jb L003nocacheinfo 84 movl $4,%eax 85 movl $0,%ecx 86 .byte 0x0f,0xa2 87 movl %eax,%esi 88 shrl $14,%esi 89 andl $4095,%esi 90 L003nocacheinfo: 91 movl $1,%eax 92 xorl %ecx,%ecx 93 .byte 0x0f,0xa2 94 andl $3220176895,%edx 95 cmpl $0,%ebp 96 jne L004notintel 97 orl $1073741824,%edx 98 andb $15,%ah 99 cmpb $15,%ah 100 jne L004notintel 101 orl $1048576,%edx 102 L004notintel: 103 btl $28,%edx 104 jnc L002generic 105 andl $4026531839,%edx 106 cmpl $0,%esi 107 je L002generic 108 orl $268435456,%edx 109 shrl $16,%ebx 110 cmpb $1,%bl 111 ja L002generic 112 andl $4026531839,%edx 113 L002generic: 114 andl $2048,%ebp 115 andl $4294965247,%ecx 116 movl %edx,%esi 117 orl %ecx,%ebp 118 cmpl $7,%edi 119 movl 20(%esp),%edi 120 jb L005no_extended_info 121 movl $7,%eax 122 xorl %ecx,%ecx 123 .byte 0x0f,0xa2 124 movl %ebx,8(%edi) 125 L005no_extended_info: 126 btl $27,%ebp 127 jnc L006clear_avx 128 xorl %ecx,%ecx 129 .byte 15,1,208 130 andl $6,%eax 131 cmpl $6,%eax 132 je L007done 133 cmpl $2,%eax 134 je L006clear_avx 135 L008clear_xmm: 136 andl $4261412861,%ebp 137 andl $4278190079,%esi 138 L006clear_avx: 139 andl $4026525695,%ebp 140 andl $4294967263,8(%edi) 141 L007done: 142 movl %esi,%eax 143 movl %ebp,%edx 144 L000nocpuid: 145 popl %edi 146 popl %esi 147 popl %ebx 148 popl %ebp 149 ret 150 .globl _OPENSSL_rdtsc 151 .type _OPENSSL_rdtsc,@function 152 .align 4 153 _OPENSSL_rdtsc: 154 L_OPENSSL_rdtsc_begin: 155 %ifdef __CET__ 156 157 .byte 243,15,30,251 158 %endif 159 160 xorl %eax,%eax 161 xorl %edx,%edx 162 call L009PIC_me_up 163 L009PIC_me_up: 164 popl %ecx 165 leal __GLOBAL_OFFSET_TABLE_+[.-L009PIC_me_up](%ecx),%ecx 166 movl _OPENSSL_ia32cap_P@GOT(%ecx),%ecx 167 btl $4,(%ecx) 168 jnc L010notsc 169 .byte 0x0f,0x31 170 L010notsc: 171 ret 172 .globl _OPENSSL_instrument_halt 173 .type _OPENSSL_instrument_halt,@function 174 .align 4 175 _OPENSSL_instrument_halt: 176 L_OPENSSL_instrument_halt_begin: 177 %ifdef __CET__ 178 179 .byte 243,15,30,251 180 %endif 181 182 call L011PIC_me_up 183 L011PIC_me_up: 184 popl %ecx 185 leal __GLOBAL_OFFSET_TABLE_+[.-L011PIC_me_up](%ecx),%ecx 186 movl _OPENSSL_ia32cap_P@GOT(%ecx),%ecx 187 btl $4,(%ecx) 188 jnc L012nohalt 189 .long 2421723150 190 andl $3,%eax 191 jnz L012nohalt 192 pushfl 193 popl %eax 194 btl $9,%eax 195 jnc L012nohalt 196 .byte 0x0f,0x31 197 pushl %edx 198 pushl %eax 199 hlt 200 .byte 0x0f,0x31 201 subl (%esp),%eax 202 sbbl 4(%esp),%edx 203 addl $8,%esp 204 ret 205 L012nohalt: 206 xorl %eax,%eax 207 xorl %edx,%edx 208 ret 209 .globl _OPENSSL_far_spin 210 .type _OPENSSL_far_spin,@function 211 .align 4 212 _OPENSSL_far_spin: 213 L_OPENSSL_far_spin_begin: 214 %ifdef __CET__ 215 216 .byte 243,15,30,251 217 %endif 218 219 pushfl 220 popl %eax 221 btl $9,%eax 222 jnc L013nospin 223 movl 4(%esp),%eax 224 movl 8(%esp),%ecx 225 .long 2430111262 226 xorl %eax,%eax 227 movl (%ecx),%edx 228 jmp L014spin 229 .align 4,0x90 230 L014spin: 231 incl %eax 232 cmpl (%ecx),%edx 233 je L014spin 234 .long 529567888 235 ret 236 L013nospin: 237 xorl %eax,%eax 238 xorl %edx,%edx 239 ret 240 .globl _OPENSSL_wipe_cpu 241 .type _OPENSSL_wipe_cpu,@function 242 .align 4 243 _OPENSSL_wipe_cpu: 244 L_OPENSSL_wipe_cpu_begin: 245 %ifdef __CET__ 246 247 .byte 243,15,30,251 248 %endif 249 250 xorl %eax,%eax 251 xorl %edx,%edx 252 call L015PIC_me_up 253 L015PIC_me_up: 254 popl %ecx 255 leal __GLOBAL_OFFSET_TABLE_+[.-L015PIC_me_up](%ecx),%ecx 256 movl _OPENSSL_ia32cap_P@GOT(%ecx),%ecx 257 movl (%ecx),%ecx 258 btl $1,(%ecx) 259 jnc L016no_x87 260 andl $83886080,%ecx 261 cmpl $83886080,%ecx 262 jne L017no_sse2 263 pxor %xmm0,%xmm0 264 pxor %xmm1,%xmm1 265 pxor %xmm2,%xmm2 266 pxor %xmm3,%xmm3 267 pxor %xmm4,%xmm4 268 pxor %xmm5,%xmm5 269 pxor %xmm6,%xmm6 270 pxor %xmm7,%xmm7 271 L017no_sse2: 272 .long 4007259865,4007259865,4007259865,4007259865,2430851995 273 L016no_x87: 274 leal 4(%esp),%eax 275 ret 276 .globl _OPENSSL_atomic_add 277 .type _OPENSSL_atomic_add,@function 278 .align 4 279 _OPENSSL_atomic_add: 280 L_OPENSSL_atomic_add_begin: 281 %ifdef __CET__ 282 283 .byte 243,15,30,251 284 %endif 285 286 movl 4(%esp),%edx 287 movl 8(%esp),%ecx 288 pushl %ebx 289 nop 290 movl (%edx),%eax 291 L018spin: 292 leal (%eax,%ecx,1),%ebx 293 nop 294 .long 447811568 295 jne L018spin 296 movl %ebx,%eax 297 popl %ebx 298 ret 299 .globl _OPENSSL_cleanse 300 .type _OPENSSL_cleanse,@function 301 .align 4 302 _OPENSSL_cleanse: 303 L_OPENSSL_cleanse_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 xorl %eax,%eax 312 cmpl $7,%ecx 313 jae L019lot 314 cmpl $0,%ecx 315 je L020ret 316 L021little: 317 movb %al,(%edx) 318 subl $1,%ecx 319 leal 1(%edx),%edx 320 jnz L021little 321 L020ret: 322 ret 323 .align 4,0x90 324 L019lot: 325 testl $3,%edx 326 jz L022aligned 327 movb %al,(%edx) 328 leal -1(%ecx),%ecx 329 leal 1(%edx),%edx 330 jmp L019lot 331 L022aligned: 332 movl %eax,(%edx) 333 leal -4(%ecx),%ecx 334 testl $-4,%ecx 335 leal 4(%edx),%edx 336 jnz L022aligned 337 cmpl $0,%ecx 338 jne L021little 339 ret 340 .globl _CRYPTO_memcmp 341 .type _CRYPTO_memcmp,@function 342 .align 4 343 _CRYPTO_memcmp: 344 L_CRYPTO_memcmp_begin: 345 %ifdef __CET__ 346 347 .byte 243,15,30,251 348 %endif 349 350 pushl %esi 351 pushl %edi 352 movl 12(%esp),%esi 353 movl 16(%esp),%edi 354 movl 20(%esp),%ecx 355 xorl %eax,%eax 356 xorl %edx,%edx 357 cmpl $0,%ecx 358 je L023no_data 359 L024loop: 360 movb (%esi),%dl 361 leal 1(%esi),%esi 362 xorb (%edi),%dl 363 leal 1(%edi),%edi 364 orb %dl,%al 365 decl %ecx 366 jnz L024loop 367 negl %eax 368 shrl $31,%eax 369 L023no_data: 370 popl %edi 371 popl %esi 372 ret 373 .globl _OPENSSL_instrument_bus 374 .type _OPENSSL_instrument_bus,@function 375 .align 4 376 _OPENSSL_instrument_bus: 377 L_OPENSSL_instrument_bus_begin: 378 %ifdef __CET__ 379 380 .byte 243,15,30,251 381 %endif 382 383 pushl %ebp 384 pushl %ebx 385 pushl %esi 386 pushl %edi 387 movl $0,%eax 388 call L025PIC_me_up 389 L025PIC_me_up: 390 popl %edx 391 leal __GLOBAL_OFFSET_TABLE_+[.-L025PIC_me_up](%edx),%edx 392 movl _OPENSSL_ia32cap_P@GOT(%edx),%edx 393 btl $4,(%edx) 394 jnc L026nogo 395 btl $19,(%edx) 396 jnc L026nogo 397 movl 20(%esp),%edi 398 movl 24(%esp),%ecx 399 .byte 0x0f,0x31 400 movl %eax,%esi 401 movl $0,%ebx 402 clflush (%edi) 403 .byte 240 404 addl %ebx,(%edi) 405 jmp L027loop 406 .align 4,0x90 407 L027loop: 408 .byte 0x0f,0x31 409 movl %eax,%edx 410 subl %esi,%eax 411 movl %edx,%esi 412 movl %eax,%ebx 413 clflush (%edi) 414 .byte 240 415 addl %eax,(%edi) 416 leal 4(%edi),%edi 417 subl $1,%ecx 418 jnz L027loop 419 movl 24(%esp),%eax 420 L026nogo: 421 popl %edi 422 popl %esi 423 popl %ebx 424 popl %ebp 425 ret 426 .globl _OPENSSL_instrument_bus2 427 .type _OPENSSL_instrument_bus2,@function 428 .align 4 429 _OPENSSL_instrument_bus2: 430 L_OPENSSL_instrument_bus2_begin: 431 %ifdef __CET__ 432 433 .byte 243,15,30,251 434 %endif 435 436 pushl %ebp 437 pushl %ebx 438 pushl %esi 439 pushl %edi 440 movl $0,%eax 441 call L028PIC_me_up 442 L028PIC_me_up: 443 popl %edx 444 leal __GLOBAL_OFFSET_TABLE_+[.-L028PIC_me_up](%edx),%edx 445 movl _OPENSSL_ia32cap_P@GOT(%edx),%edx 446 btl $4,(%edx) 447 jnc L029nogo 448 btl $19,(%edx) 449 jnc L029nogo 450 movl 20(%esp),%edi 451 movl 24(%esp),%ecx 452 movl 28(%esp),%ebp 453 .byte 0x0f,0x31 454 movl %eax,%esi 455 movl $0,%ebx 456 clflush (%edi) 457 .byte 240 458 addl %ebx,(%edi) 459 .byte 0x0f,0x31 460 movl %eax,%edx 461 subl %esi,%eax 462 movl %edx,%esi 463 movl %eax,%ebx 464 jmp L030loop2 465 .align 4,0x90 466 L030loop2: 467 clflush (%edi) 468 .byte 240 469 addl %eax,(%edi) 470 subl $1,%ebp 471 jz L031done2 472 .byte 0x0f,0x31 473 movl %eax,%edx 474 subl %esi,%eax 475 movl %edx,%esi 476 cmpl %ebx,%eax 477 movl %eax,%ebx 478 movl $0,%edx 479 setne %dl 480 subl %edx,%ecx 481 leal (%edi,%edx,4),%edi 482 jnz L030loop2 483 L031done2: 484 movl 24(%esp),%eax 485 subl %ecx,%eax 486 L029nogo: 487 popl %edi 488 popl %esi 489 popl %ebx 490 popl %ebp 491 ret 492 .globl _OPENSSL_ia32_rdrand_bytes 493 .type _OPENSSL_ia32_rdrand_bytes,@function 494 .align 4 495 _OPENSSL_ia32_rdrand_bytes: 496 L_OPENSSL_ia32_rdrand_bytes_begin: 497 %ifdef __CET__ 498 499 .byte 243,15,30,251 500 %endif 501 502 pushl %edi 503 pushl %ebx 504 xorl %eax,%eax 505 movl 12(%esp),%edi 506 movl 16(%esp),%ebx 507 cmpl $0,%ebx 508 je L032done 509 movl $8,%ecx 510 L033loop: 511 .byte 15,199,242 512 jc L034break 513 loop L033loop 514 jmp L032done 515 .align 4,0x90 516 L034break: 517 cmpl $4,%ebx 518 jb L035tail 519 movl %edx,(%edi) 520 leal 4(%edi),%edi 521 addl $4,%eax 522 subl $4,%ebx 523 jz L032done 524 movl $8,%ecx 525 jmp L033loop 526 .align 4,0x90 527 L035tail: 528 movb %dl,(%edi) 529 leal 1(%edi),%edi 530 incl %eax 531 shrl $8,%edx 532 decl %ebx 533 jnz L035tail 534 L032done: 535 xorl %edx,%edx 536 popl %ebx 537 popl %edi 538 ret 539 .globl _OPENSSL_ia32_rdseed_bytes 540 .type _OPENSSL_ia32_rdseed_bytes,@function 541 .align 4 542 _OPENSSL_ia32_rdseed_bytes: 543 L_OPENSSL_ia32_rdseed_bytes_begin: 544 %ifdef __CET__ 545 546 .byte 243,15,30,251 547 %endif 548 549 pushl %edi 550 pushl %ebx 551 xorl %eax,%eax 552 movl 12(%esp),%edi 553 movl 16(%esp),%ebx 554 cmpl $0,%ebx 555 je L036done 556 movl $8,%ecx 557 L037loop: 558 .byte 15,199,250 559 jc L038break 560 loop L037loop 561 jmp L036done 562 .align 4,0x90 563 L038break: 564 cmpl $4,%ebx 565 jb L039tail 566 movl %edx,(%edi) 567 leal 4(%edi),%edi 568 addl $4,%eax 569 subl $4,%ebx 570 jz L036done 571 movl $8,%ecx 572 jmp L037loop 573 .align 4,0x90 574 L039tail: 575 movb %dl,(%edi) 576 leal 1(%edi),%edi 577 incl %eax 578 shrl $8,%edx 579 decl %ebx 580 jnz L039tail 581 L036done: 582 xorl %edx,%edx 583 popl %ebx 584 popl %edi 585 ret 586 .comm _OPENSSL_ia32cap_P,16 587 .text 588 .type __GLOBAL_$I$_OPENSSL_cpuid_setup,@function 589 .globl __GLOBAL_$I$_OPENSSL_cpuid_setup 590 .align 2 591 __GLOBAL_$I$_OPENSSL_cpuid_setup: 592 jmp _OPENSSL_cpuid_setup 593