.text | |
.globl OPENSSL_ia32_cpuid | |
.type OPENSSL_ia32_cpuid,@function | |
.align 16 | |
OPENSSL_ia32_cpuid: | |
.L_OPENSSL_ia32_cpuid_begin: | |
#ifdef __CET__ | |
.byte 243,15,30,251 | |
#endif | |
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 | |
xorl %eax,%eax | |
movl 20(%esp),%esi | |
movl %eax,8(%esi) | |
btl $21,%ecx | |
jnc .L000nocpuid | |
.byte 0x0f,0xa2 | |
movl %eax,%edi | |
xorl %eax,%eax | |
cmpl $1970169159,%ebx | |
setne %al | |
movl %eax,%ebp | |
cmpl $1231384169,%edx | |
setne %al | |
orl %eax,%ebp | |
cmpl $1818588270,%ecx | |
setne %al | |
orl %eax,%ebp | |
jz .L001intel | |
cmpl $1752462657,%ebx | |
setne %al | |
movl %eax,%esi | |
cmpl $1769238117,%edx | |
setne %al | |
orl %eax,%esi | |
cmpl $1145913699,%ecx | |
setne %al | |
orl %eax,%esi | |
jnz .L001intel | |
movl $2147483648,%eax | |
.byte 0x0f,0xa2 | |
cmpl $2147483649,%eax | |
jb .L001intel | |
movl %eax,%esi | |
movl $2147483649,%eax | |
.byte 0x0f,0xa2 | |
orl %ecx,%ebp | |
andl $2049,%ebp | |
cmpl $2147483656,%esi | |
jb .L001intel | |
movl $2147483656,%eax | |
.byte 0x0f,0xa2 | |
movzbl %cl,%esi | |
incl %esi | |
movl $1,%eax | |
xorl %ecx,%ecx | |
.byte 0x0f,0xa2 | |
btl $28,%edx | |
jnc .L002generic | |
shrl $16,%ebx | |
andl $255,%ebx | |
cmpl %esi,%ebx | |
ja .L002generic | |
andl $4026531839,%edx | |
jmp .L002generic | |
.L001intel: | |
cmpl $4,%edi | |
movl $-1,%esi | |
jb .L003nocacheinfo | |
movl $4,%eax | |
movl $0,%ecx | |
.byte 0x0f,0xa2 | |
movl %eax,%esi | |
shrl $14,%esi | |
andl $4095,%esi | |
.L003nocacheinfo: | |
movl $1,%eax | |
xorl %ecx,%ecx | |
.byte 0x0f,0xa2 | |
andl $3220176895,%edx | |
cmpl $0,%ebp | |
jne .L004notintel | |
orl $1073741824,%edx | |
andb $15,%ah | |
cmpb $15,%ah | |
jne .L004notintel | |
orl $1048576,%edx | |
.L004notintel: | |
btl $28,%edx | |
jnc .L002generic | |
andl $4026531839,%edx | |
cmpl $0,%esi | |
je .L002generic | |
orl $268435456,%edx | |
shrl $16,%ebx | |
cmpb $1,%bl | |
ja .L002generic | |
andl $4026531839,%edx | |
.L002generic: | |
andl $2048,%ebp | |
andl $4294965247,%ecx | |
movl %edx,%esi | |
orl %ecx,%ebp | |
cmpl $7,%edi | |
movl 20(%esp),%edi | |
jb .L005no_extended_info | |
movl $7,%eax | |
xorl %ecx,%ecx | |
.byte 0x0f,0xa2 | |
movl %ebx,8(%edi) | |
.L005no_extended_info: | |
btl $27,%ebp | |
jnc .L006clear_avx | |
xorl %ecx,%ecx | |
.byte 15,1,208 | |
andl $6,%eax | |
cmpl $6,%eax | |
je .L007done | |
cmpl $2,%eax | |
je .L006clear_avx | |
.L008clear_xmm: | |
andl $4261412861,%ebp | |
andl $4278190079,%esi | |
.L006clear_avx: | |
andl $4026525695,%ebp | |
andl $4294967263,8(%edi) | |
.L007done: | |
movl %esi,%eax | |
movl %ebp,%edx | |
.L000nocpuid: | |
popl %edi | |
popl %esi | |
popl %ebx | |
popl %ebp | |
ret | |
.size OPENSSL_ia32_cpuid,.-.L_OPENSSL_ia32_cpuid_begin | |
.globl OPENSSL_rdtsc | |
.type OPENSSL_rdtsc,@function | |
.align 16 | |
OPENSSL_rdtsc: | |
.L_OPENSSL_rdtsc_begin: | |
#ifdef __CET__ | |
.byte 243,15,30,251 | |
#endif | |
xorl %eax,%eax | |
xorl %edx,%edx | |
leal OPENSSL_ia32cap_P,%ecx | |
btl $4,(%ecx) | |
jnc .L009notsc | |
.byte 0x0f,0x31 | |
.L009notsc: | |
ret | |
.size OPENSSL_rdtsc,.-.L_OPENSSL_rdtsc_begin | |
.globl OPENSSL_instrument_halt | |
.type OPENSSL_instrument_halt,@function | |
.align 16 | |
OPENSSL_instrument_halt: | |
.L_OPENSSL_instrument_halt_begin: | |
#ifdef __CET__ | |
.byte 243,15,30,251 | |
#endif | |
leal OPENSSL_ia32cap_P,%ecx | |
btl $4,(%ecx) | |
jnc .L010nohalt | |
.long 2421723150 | |
andl $3,%eax | |
jnz .L010nohalt | |
pushfl | |
popl %eax | |
btl $9,%eax | |
jnc .L010nohalt | |
.byte 0x0f,0x31 | |
pushl %edx | |
pushl %eax | |
hlt | |
.byte 0x0f,0x31 | |
subl (%esp),%eax | |
sbbl 4(%esp),%edx | |
addl $8,%esp | |
ret | |
.L010nohalt: | |
xorl %eax,%eax | |
xorl %edx,%edx | |
ret | |
.size OPENSSL_instrument_halt,.-.L_OPENSSL_instrument_halt_begin | |
.globl OPENSSL_far_spin | |
.type OPENSSL_far_spin,@function | |
.align 16 | |
OPENSSL_far_spin: | |
.L_OPENSSL_far_spin_begin: | |
#ifdef __CET__ | |
.byte 243,15,30,251 | |
#endif | |
pushfl | |
popl %eax | |
btl $9,%eax | |
jnc .L011nospin | |
movl 4(%esp),%eax | |
movl 8(%esp),%ecx | |
.long 2430111262 | |
xorl %eax,%eax | |
movl (%ecx),%edx | |
jmp .L012spin | |
.align 16 | |
.L012spin: | |
incl %eax | |
cmpl (%ecx),%edx | |
je .L012spin | |
.long 529567888 | |
ret | |
.L011nospin: | |
xorl %eax,%eax | |
xorl %edx,%edx | |
ret | |
.size OPENSSL_far_spin,.-.L_OPENSSL_far_spin_begin | |
.globl OPENSSL_wipe_cpu | |
.type OPENSSL_wipe_cpu,@function | |
.align 16 | |
OPENSSL_wipe_cpu: | |
.L_OPENSSL_wipe_cpu_begin: | |
#ifdef __CET__ | |
.byte 243,15,30,251 | |
#endif | |
xorl %eax,%eax | |
xorl %edx,%edx | |
leal OPENSSL_ia32cap_P,%ecx | |
movl (%ecx),%ecx | |
btl $1,(%ecx) | |
jnc .L013no_x87 | |
andl $83886080,%ecx | |
cmpl $83886080,%ecx | |
jne .L014no_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 | |
.L014no_sse2: | |
.long 4007259865,4007259865,4007259865,4007259865,2430851995 | |
.L013no_x87: | |
leal 4(%esp),%eax | |
ret | |
.size OPENSSL_wipe_cpu,.-.L_OPENSSL_wipe_cpu_begin | |
.globl OPENSSL_atomic_add | |
.type OPENSSL_atomic_add,@function | |
.align 16 | |
OPENSSL_atomic_add: | |
.L_OPENSSL_atomic_add_begin: | |
#ifdef __CET__ | |
.byte 243,15,30,251 | |
#endif | |
movl 4(%esp),%edx | |
movl 8(%esp),%ecx | |
pushl %ebx | |
nop | |
movl (%edx),%eax | |
.L015spin: | |
leal (%eax,%ecx,1),%ebx | |
nop | |
.long 447811568 | |
jne .L015spin | |
movl %ebx,%eax | |
popl %ebx | |
ret | |
.size OPENSSL_atomic_add,.-.L_OPENSSL_atomic_add_begin | |
.globl OPENSSL_cleanse | |
.type OPENSSL_cleanse,@function | |
.align 16 | |
OPENSSL_cleanse: | |
.L_OPENSSL_cleanse_begin: | |
#ifdef __CET__ | |
.byte 243,15,30,251 | |
#endif | |
movl 4(%esp),%edx | |
movl 8(%esp),%ecx | |
xorl %eax,%eax | |
cmpl $7,%ecx | |
jae .L016lot | |
cmpl $0,%ecx | |
je .L017ret | |
.L018little: | |
movb %al,(%edx) | |
subl $1,%ecx | |
leal 1(%edx),%edx | |
jnz .L018little | |
.L017ret: | |
ret | |
.align 16 | |
.L016lot: | |
testl $3,%edx | |
jz .L019aligned | |
movb %al,(%edx) | |
leal -1(%ecx),%ecx | |
leal 1(%edx),%edx | |
jmp .L016lot | |
.L019aligned: | |
movl %eax,(%edx) | |
leal -4(%ecx),%ecx | |
testl $-4,%ecx | |
leal 4(%edx),%edx | |
jnz .L019aligned | |
cmpl $0,%ecx | |
jne .L018little | |
ret | |
.size OPENSSL_cleanse,.-.L_OPENSSL_cleanse_begin | |
.globl CRYPTO_memcmp | |
.type CRYPTO_memcmp,@function | |
.align 16 | |
CRYPTO_memcmp: | |
.L_CRYPTO_memcmp_begin: | |
#ifdef __CET__ | |
.byte 243,15,30,251 | |
#endif | |
pushl %esi | |
pushl %edi | |
movl 12(%esp),%esi | |
movl 16(%esp),%edi | |
movl 20(%esp),%ecx | |
xorl %eax,%eax | |
xorl %edx,%edx | |
cmpl $0,%ecx | |
je .L020no_data | |
.L021loop: | |
movb (%esi),%dl | |
leal 1(%esi),%esi | |
xorb (%edi),%dl | |
leal 1(%edi),%edi | |
orb %dl,%al | |
decl %ecx | |
jnz .L021loop | |
negl %eax | |
shrl $31,%eax | |
.L020no_data: | |
popl %edi | |
popl %esi | |
ret | |
.size CRYPTO_memcmp,.-.L_CRYPTO_memcmp_begin | |
.globl OPENSSL_instrument_bus | |
.type OPENSSL_instrument_bus,@function | |
.align 16 | |
OPENSSL_instrument_bus: | |
.L_OPENSSL_instrument_bus_begin: | |
#ifdef __CET__ | |
.byte 243,15,30,251 | |
#endif | |
pushl %ebp | |
pushl %ebx | |
pushl %esi | |
pushl %edi | |
movl $0,%eax | |
leal OPENSSL_ia32cap_P,%edx | |
btl $4,(%edx) | |
jnc .L022nogo | |
btl $19,(%edx) | |
jnc .L022nogo | |
movl 20(%esp),%edi | |
movl 24(%esp),%ecx | |
.byte 0x0f,0x31 | |
movl %eax,%esi | |
movl $0,%ebx | |
clflush (%edi) | |
.byte 240 | |
addl %ebx,(%edi) | |
jmp .L023loop | |
.align 16 | |
.L023loop: | |
.byte 0x0f,0x31 | |
movl %eax,%edx | |
subl %esi,%eax | |
movl %edx,%esi | |
movl %eax,%ebx | |
clflush (%edi) | |
.byte 240 | |
addl %eax,(%edi) | |
leal 4(%edi),%edi | |
subl $1,%ecx | |
jnz .L023loop | |
movl 24(%esp),%eax | |
.L022nogo: | |
popl %edi | |
popl %esi | |
popl %ebx | |
popl %ebp | |
ret | |
.size OPENSSL_instrument_bus,.-.L_OPENSSL_instrument_bus_begin | |
.globl OPENSSL_instrument_bus2 | |
.type OPENSSL_instrument_bus2,@function | |
.align 16 | |
OPENSSL_instrument_bus2: | |
.L_OPENSSL_instrument_bus2_begin: | |
#ifdef __CET__ | |
.byte 243,15,30,251 | |
#endif | |
pushl %ebp | |
pushl %ebx | |
pushl %esi | |
pushl %edi | |
movl $0,%eax | |
leal OPENSSL_ia32cap_P,%edx | |
btl $4,(%edx) | |
jnc .L024nogo | |
btl $19,(%edx) | |
jnc .L024nogo | |
movl 20(%esp),%edi | |
movl 24(%esp),%ecx | |
movl 28(%esp),%ebp | |
.byte 0x0f,0x31 | |
movl %eax,%esi | |
movl $0,%ebx | |
clflush (%edi) | |
.byte 240 | |
addl %ebx,(%edi) | |
.byte 0x0f,0x31 | |
movl %eax,%edx | |
subl %esi,%eax | |
movl %edx,%esi | |
movl %eax,%ebx | |
jmp .L025loop2 | |
.align 16 | |
.L025loop2: | |
clflush (%edi) | |
.byte 240 | |
addl %eax,(%edi) | |
subl $1,%ebp | |
jz .L026done2 | |
.byte 0x0f,0x31 | |
movl %eax,%edx | |
subl %esi,%eax | |
movl %edx,%esi | |
cmpl %ebx,%eax | |
movl %eax,%ebx | |
movl $0,%edx | |
setne %dl | |
subl %edx,%ecx | |
leal (%edi,%edx,4),%edi | |
jnz .L025loop2 | |
.L026done2: | |
movl 24(%esp),%eax | |
subl %ecx,%eax | |
.L024nogo: | |
popl %edi | |
popl %esi | |
popl %ebx | |
popl %ebp | |
ret | |
.size OPENSSL_instrument_bus2,.-.L_OPENSSL_instrument_bus2_begin | |
.globl OPENSSL_ia32_rdrand_bytes | |
.type OPENSSL_ia32_rdrand_bytes,@function | |
.align 16 | |
OPENSSL_ia32_rdrand_bytes: | |
.L_OPENSSL_ia32_rdrand_bytes_begin: | |
#ifdef __CET__ | |
.byte 243,15,30,251 | |
#endif | |
pushl %edi | |
pushl %ebx | |
xorl %eax,%eax | |
movl 12(%esp),%edi | |
movl 16(%esp),%ebx | |
cmpl $0,%ebx | |
je .L027done | |
movl $8,%ecx | |
.L028loop: | |
.byte 15,199,242 | |
jc .L029break | |
loop .L028loop | |
jmp .L027done | |
.align 16 | |
.L029break: | |
cmpl $4,%ebx | |
jb .L030tail | |
movl %edx,(%edi) | |
leal 4(%edi),%edi | |
addl $4,%eax | |
subl $4,%ebx | |
jz .L027done | |
movl $8,%ecx | |
jmp .L028loop | |
.align 16 | |
.L030tail: | |
movb %dl,(%edi) | |
leal 1(%edi),%edi | |
incl %eax | |
shrl $8,%edx | |
decl %ebx | |
jnz .L030tail | |
.L027done: | |
xorl %edx,%edx | |
popl %ebx | |
popl %edi | |
ret | |
.size OPENSSL_ia32_rdrand_bytes,.-.L_OPENSSL_ia32_rdrand_bytes_begin | |
.globl OPENSSL_ia32_rdseed_bytes | |
.type OPENSSL_ia32_rdseed_bytes,@function | |
.align 16 | |
OPENSSL_ia32_rdseed_bytes: | |
.L_OPENSSL_ia32_rdseed_bytes_begin: | |
#ifdef __CET__ | |
.byte 243,15,30,251 | |
#endif | |
pushl %edi | |
pushl %ebx | |
xorl %eax,%eax | |
movl 12(%esp),%edi | |
movl 16(%esp),%ebx | |
cmpl $0,%ebx | |
je .L031done | |
movl $8,%ecx | |
.L032loop: | |
.byte 15,199,250 | |
jc .L033break | |
loop .L032loop | |
jmp .L031done | |
.align 16 | |
.L033break: | |
cmpl $4,%ebx | |
jb .L034tail | |
movl %edx,(%edi) | |
leal 4(%edi),%edi | |
addl $4,%eax | |
subl $4,%ebx | |
jz .L031done | |
movl $8,%ecx | |
jmp .L032loop | |
.align 16 | |
.L034tail: | |
movb %dl,(%edi) | |
leal 1(%edi),%edi | |
incl %eax | |
shrl $8,%edx | |
decl %ebx | |
jnz .L034tail | |
.L031done: | |
xorl %edx,%edx | |
popl %ebx | |
popl %edi | |
ret | |
.size OPENSSL_ia32_rdseed_bytes,.-.L_OPENSSL_ia32_rdseed_bytes_begin | |
.hidden OPENSSL_cpuid_setup | |
.hidden OPENSSL_ia32cap_P | |
.comm OPENSSL_ia32cap_P,16,4 | |
.section .init | |
call OPENSSL_cpuid_setup | |
.section ".note.gnu.property", "a" | |
.p2align 2 | |
.long 1f - 0f | |
.long 4f - 1f | |
.long 5 | |
0: | |
.asciz "GNU" | |
1: | |
.p2align 2 | |
.long 0xc0000002 | |
.long 3f - 2f | |
2: | |
.long 3 | |
3: | |
.p2align 2 | |
4: |