.file "x86cpuid.s" .text .globl OPENSSL_ia32_cpuid .type OPENSSL_ia32_cpuid,@function .align 16 OPENSSL_ia32_cpuid: pushl %ebp pushl %ebx pushl %esi pushl %edi xorl %edx, %edx pushfl popl %eax movl %eax, %ecx xorl $2097152, %eax pushl %eax popfl pushfl popl %eax xorl %eax, %ecx btl $21, %ecx jnc .L000done xorl %eax, %eax .byte 0x0f,0xa2 xorl %eax, %eax cmpl $1970169159, %ebx .byte 15,149,192 movl %eax, %ebp cmpl $1231384169, %edx .byte 15,149,192 orl %eax, %ebp cmpl $1818588270, %ecx .byte 15,149,192 orl %eax, %ebp movl $1, %eax xorl %ecx, %ecx .byte 0x0f,0xa2 cmpl $0, %ebp jne .L001notP4 andl $3840, %eax cmpl $3840, %eax jne .L001notP4 orl $1048576, %edx .L001notP4: btl $28, %edx jnc .L000done shrl $16, %ebx andl $255, %ebx cmpl $1, %ebx ja .L000done andl $4026531839, %edx .L000done: movl %edx, %eax movl %ecx, %edx popl %edi popl %esi popl %ebx popl %ebp ret .L_OPENSSL_ia32_cpuid_end: .size OPENSSL_ia32_cpuid,.L_OPENSSL_ia32_cpuid_end-OPENSSL_ia32_cpuid .ident "OPENSSL_ia32_cpuid" .text .globl OPENSSL_rdtsc .type OPENSSL_rdtsc,@function .align 16 OPENSSL_rdtsc: xorl %eax, %eax xorl %edx, %edx call .L002PIC_me_up .L002PIC_me_up: popl %ecx addl $_GLOBAL_OFFSET_TABLE_+[.-.L002PIC_me_up],%ecx movl OPENSSL_ia32cap_P@GOT(%ecx),%ecx btl $4, (%ecx) jnc .L003notsc .byte 0x0f,0x31 .L003notsc: ret .L_OPENSSL_rdtsc_end: .size OPENSSL_rdtsc,.L_OPENSSL_rdtsc_end-OPENSSL_rdtsc .ident "OPENSSL_rdtsc" .text .globl OPENSSL_instrument_halt .type OPENSSL_instrument_halt,@function .align 16 OPENSSL_instrument_halt: call .L004PIC_me_up .L004PIC_me_up: popl %ecx addl $_GLOBAL_OFFSET_TABLE_+[.-.L004PIC_me_up],%ecx movl OPENSSL_ia32cap_P@GOT(%ecx),%ecx btl $4, (%ecx) jnc .L005nohalt .long 2421723150 andl $3, %eax jnz .L005nohalt pushfl popl %eax btl $9, %eax jnc .L005nohalt .byte 0x0f,0x31 pushl %edx pushl %eax hlt .byte 0x0f,0x31 subl (%esp), %eax sbbl 4(%esp), %edx addl $8, %esp ret .L005nohalt: xorl %eax, %eax xorl %edx, %edx ret .L_OPENSSL_instrument_halt_end: .size OPENSSL_instrument_halt,.L_OPENSSL_instrument_halt_end-OPENSSL_instrument_halt .ident "OPENSSL_instrument_halt" .text .globl OPENSSL_far_spin .type OPENSSL_far_spin,@function .align 16 OPENSSL_far_spin: pushfl popl %eax btl $9, %eax jnc .L006nospin movl 4(%esp), %eax movl 8(%esp), %ecx .long 2430111262 xorl %eax, %eax movl (%ecx), %edx jmp .L007spin .align 16 .L007spin: incl %eax cmpl (%ecx), %edx je .L007spin .long 529567888 ret .L006nospin: xorl %eax, %eax xorl %edx, %edx ret .L_OPENSSL_far_spin_end: .size OPENSSL_far_spin,.L_OPENSSL_far_spin_end-OPENSSL_far_spin .ident "OPENSSL_far_spin" .text .globl OPENSSL_wipe_cpu .type OPENSSL_wipe_cpu,@function .align 16 OPENSSL_wipe_cpu: xorl %eax, %eax xorl %edx, %edx call .L008PIC_me_up .L008PIC_me_up: popl %ecx addl $_GLOBAL_OFFSET_TABLE_+[.-.L008PIC_me_up],%ecx movl OPENSSL_ia32cap_P@GOT(%ecx),%ecx movl (%ecx), %ecx btl $1, (%ecx) jnc .L009no_x87 btl $26, (%ecx) jnc .L010no_sse2 pxor %xmm0, %xmm0 pxor %xmm1, %xmm1 pxor %xmm2, %xmm2 pxor %xmm3, %xmm3 pxor %xmm4, %xmm4 pxor %xmm5, %xmm5 pxor %xmm6, %xmm6 pxor %xmm7, %xmm7 .L010no_sse2: .long 4007259865,4007259865,4007259865,4007259865,2430851995 .L009no_x87: leal 4(%esp), %eax ret .L_OPENSSL_wipe_cpu_end: .size OPENSSL_wipe_cpu,.L_OPENSSL_wipe_cpu_end-OPENSSL_wipe_cpu .ident "OPENSSL_wipe_cpu" .text .globl OPENSSL_atomic_add .type OPENSSL_atomic_add,@function .align 16 OPENSSL_atomic_add: movl 4(%esp), %edx movl 8(%esp), %ecx pushl %ebx nop movl (%edx), %eax .L011spin: leal (%eax,%ecx), %ebx nop .long 447811568 jne .L011spin movl %ebx, %eax popl %ebx ret .L_OPENSSL_atomic_add_end: .size OPENSSL_atomic_add,.L_OPENSSL_atomic_add_end-OPENSSL_atomic_add .ident "OPENSSL_atomic_add" .text .globl OPENSSL_indirect_call .type OPENSSL_indirect_call,@function .align 16 OPENSSL_indirect_call: pushl %ebp movl %esp, %ebp subl $28, %esp movl 12(%ebp), %ecx movl %ecx, (%esp) movl 16(%ebp), %edx movl %edx, 4(%esp) movl 20(%ebp), %eax movl %eax, 8(%esp) movl 24(%ebp), %eax movl %eax, 12(%esp) movl 28(%ebp), %eax movl %eax, 16(%esp) movl 32(%ebp), %eax movl %eax, 20(%esp) movl 36(%ebp), %eax movl %eax, 24(%esp) call *8(%ebp) movl %ebp, %esp popl %ebp ret .L_OPENSSL_indirect_call_end: .size OPENSSL_indirect_call,.L_OPENSSL_indirect_call_end-OPENSSL_indirect_call .ident "OPENSSL_indirect_call" .section .init call OPENSSL_cpuid_setup jmp .Linitalign .align 16 .Linitalign: .section .bss .comm OPENSSL_ia32cap_P,4,4