; WARNING: do not edit! | |
; Generated from openssl/crypto/x86cpuid.pl | |
; | |
; Copyright 2004-2020 The OpenSSL Project Authors. All Rights Reserved. | |
; | |
; Licensed under the OpenSSL license (the "License"). You may not use | |
; this file except in compliance with the License. You can obtain a copy | |
; in the file LICENSE in the source distribution or at | |
; https://www.openssl.org/source/license.html | |
%ifidn __OUTPUT_FORMAT__,obj | |
section code use32 class=code align=64 | |
%elifidn __OUTPUT_FORMAT__,win32 | |
$@feat.00 equ 1 | |
section .text code align=64 | |
%else | |
section .text code | |
%endif | |
global _OPENSSL_ia32_cpuid | |
align 16 | |
_OPENSSL_ia32_cpuid: | |
L$_OPENSSL_ia32_cpuid_begin: | |
push ebp | |
push ebx | |
push esi | |
push edi | |
xor edx,edx | |
pushfd | |
pop eax | |
mov ecx,eax | |
xor eax,2097152 | |
push eax | |
popfd | |
pushfd | |
pop eax | |
xor ecx,eax | |
xor eax,eax | |
mov esi,DWORD [20+esp] | |
mov DWORD [8+esi],eax | |
bt ecx,21 | |
jnc NEAR L$000nocpuid | |
cpuid | |
mov edi,eax | |
xor eax,eax | |
cmp ebx,1970169159 | |
setne al | |
mov ebp,eax | |
cmp edx,1231384169 | |
setne al | |
or ebp,eax | |
cmp ecx,1818588270 | |
setne al | |
or ebp,eax | |
jz NEAR L$001intel | |
cmp ebx,1752462657 | |
setne al | |
mov esi,eax | |
cmp edx,1769238117 | |
setne al | |
or esi,eax | |
cmp ecx,1145913699 | |
setne al | |
or esi,eax | |
jnz NEAR L$001intel | |
mov eax,2147483648 | |
cpuid | |
cmp eax,2147483649 | |
jb NEAR L$001intel | |
mov esi,eax | |
mov eax,2147483649 | |
cpuid | |
or ebp,ecx | |
and ebp,2049 | |
cmp esi,2147483656 | |
jb NEAR L$001intel | |
mov eax,2147483656 | |
cpuid | |
movzx esi,cl | |
inc esi | |
mov eax,1 | |
xor ecx,ecx | |
cpuid | |
bt edx,28 | |
jnc NEAR L$002generic | |
shr ebx,16 | |
and ebx,255 | |
cmp ebx,esi | |
ja NEAR L$002generic | |
and edx,4026531839 | |
jmp NEAR L$002generic | |
L$001intel: | |
cmp edi,4 | |
mov esi,-1 | |
jb NEAR L$003nocacheinfo | |
mov eax,4 | |
mov ecx,0 | |
cpuid | |
mov esi,eax | |
shr esi,14 | |
and esi,4095 | |
L$003nocacheinfo: | |
mov eax,1 | |
xor ecx,ecx | |
cpuid | |
and edx,3220176895 | |
cmp ebp,0 | |
jne NEAR L$004notintel | |
or edx,1073741824 | |
and ah,15 | |
cmp ah,15 | |
jne NEAR L$004notintel | |
or edx,1048576 | |
L$004notintel: | |
bt edx,28 | |
jnc NEAR L$002generic | |
and edx,4026531839 | |
cmp esi,0 | |
je NEAR L$002generic | |
or edx,268435456 | |
shr ebx,16 | |
cmp bl,1 | |
ja NEAR L$002generic | |
and edx,4026531839 | |
L$002generic: | |
and ebp,2048 | |
and ecx,4294965247 | |
mov esi,edx | |
or ebp,ecx | |
cmp edi,7 | |
mov edi,DWORD [20+esp] | |
jb NEAR L$005no_extended_info | |
mov eax,7 | |
xor ecx,ecx | |
cpuid | |
mov DWORD [8+edi],ebx | |
L$005no_extended_info: | |
bt ebp,27 | |
jnc NEAR L$006clear_avx | |
xor ecx,ecx | |
db 15,1,208 | |
and eax,6 | |
cmp eax,6 | |
je NEAR L$007done | |
cmp eax,2 | |
je NEAR L$006clear_avx | |
L$008clear_xmm: | |
and ebp,4261412861 | |
and esi,4278190079 | |
L$006clear_avx: | |
and ebp,4026525695 | |
and DWORD [8+edi],4294967263 | |
L$007done: | |
mov eax,esi | |
mov edx,ebp | |
L$000nocpuid: | |
pop edi | |
pop esi | |
pop ebx | |
pop ebp | |
ret | |
;extern _OPENSSL_ia32cap_P | |
global _OPENSSL_rdtsc | |
align 16 | |
_OPENSSL_rdtsc: | |
L$_OPENSSL_rdtsc_begin: | |
xor eax,eax | |
xor edx,edx | |
lea ecx,[_OPENSSL_ia32cap_P] | |
bt DWORD [ecx],4 | |
jnc NEAR L$009notsc | |
rdtsc | |
L$009notsc: | |
ret | |
global _OPENSSL_instrument_halt | |
align 16 | |
_OPENSSL_instrument_halt: | |
L$_OPENSSL_instrument_halt_begin: | |
lea ecx,[_OPENSSL_ia32cap_P] | |
bt DWORD [ecx],4 | |
jnc NEAR L$010nohalt | |
dd 2421723150 | |
and eax,3 | |
jnz NEAR L$010nohalt | |
pushfd | |
pop eax | |
bt eax,9 | |
jnc NEAR L$010nohalt | |
rdtsc | |
push edx | |
push eax | |
hlt | |
rdtsc | |
sub eax,DWORD [esp] | |
sbb edx,DWORD [4+esp] | |
add esp,8 | |
ret | |
L$010nohalt: | |
xor eax,eax | |
xor edx,edx | |
ret | |
global _OPENSSL_far_spin | |
align 16 | |
_OPENSSL_far_spin: | |
L$_OPENSSL_far_spin_begin: | |
pushfd | |
pop eax | |
bt eax,9 | |
jnc NEAR L$011nospin | |
mov eax,DWORD [4+esp] | |
mov ecx,DWORD [8+esp] | |
dd 2430111262 | |
xor eax,eax | |
mov edx,DWORD [ecx] | |
jmp NEAR L$012spin | |
align 16 | |
L$012spin: | |
inc eax | |
cmp edx,DWORD [ecx] | |
je NEAR L$012spin | |
dd 529567888 | |
ret | |
L$011nospin: | |
xor eax,eax | |
xor edx,edx | |
ret | |
global _OPENSSL_wipe_cpu | |
align 16 | |
_OPENSSL_wipe_cpu: | |
L$_OPENSSL_wipe_cpu_begin: | |
xor eax,eax | |
xor edx,edx | |
lea ecx,[_OPENSSL_ia32cap_P] | |
mov ecx,DWORD [ecx] | |
bt DWORD [ecx],1 | |
jnc NEAR L$013no_x87 | |
dd 4007259865,4007259865,4007259865,4007259865,2430851995 | |
L$013no_x87: | |
lea eax,[4+esp] | |
ret | |
global _OPENSSL_atomic_add | |
align 16 | |
_OPENSSL_atomic_add: | |
L$_OPENSSL_atomic_add_begin: | |
mov edx,DWORD [4+esp] | |
mov ecx,DWORD [8+esp] | |
push ebx | |
nop | |
mov eax,DWORD [edx] | |
L$014spin: | |
lea ebx,[ecx*1+eax] | |
nop | |
dd 447811568 | |
jne NEAR L$014spin | |
mov eax,ebx | |
pop ebx | |
ret | |
global _OPENSSL_cleanse | |
align 16 | |
_OPENSSL_cleanse: | |
L$_OPENSSL_cleanse_begin: | |
mov edx,DWORD [4+esp] | |
mov ecx,DWORD [8+esp] | |
xor eax,eax | |
cmp ecx,7 | |
jae NEAR L$015lot | |
cmp ecx,0 | |
je NEAR L$016ret | |
L$017little: | |
mov BYTE [edx],al | |
sub ecx,1 | |
lea edx,[1+edx] | |
jnz NEAR L$017little | |
L$016ret: | |
ret | |
align 16 | |
L$015lot: | |
test edx,3 | |
jz NEAR L$018aligned | |
mov BYTE [edx],al | |
lea ecx,[ecx-1] | |
lea edx,[1+edx] | |
jmp NEAR L$015lot | |
L$018aligned: | |
mov DWORD [edx],eax | |
lea ecx,[ecx-4] | |
test ecx,-4 | |
lea edx,[4+edx] | |
jnz NEAR L$018aligned | |
cmp ecx,0 | |
jne NEAR L$017little | |
ret | |
global _CRYPTO_memcmp | |
align 16 | |
_CRYPTO_memcmp: | |
L$_CRYPTO_memcmp_begin: | |
push esi | |
push edi | |
mov esi,DWORD [12+esp] | |
mov edi,DWORD [16+esp] | |
mov ecx,DWORD [20+esp] | |
xor eax,eax | |
xor edx,edx | |
cmp ecx,0 | |
je NEAR L$019no_data | |
L$020loop: | |
mov dl,BYTE [esi] | |
lea esi,[1+esi] | |
xor dl,BYTE [edi] | |
lea edi,[1+edi] | |
or al,dl | |
dec ecx | |
jnz NEAR L$020loop | |
neg eax | |
shr eax,31 | |
L$019no_data: | |
pop edi | |
pop esi | |
ret | |
global _OPENSSL_instrument_bus | |
align 16 | |
_OPENSSL_instrument_bus: | |
L$_OPENSSL_instrument_bus_begin: | |
push ebp | |
push ebx | |
push esi | |
push edi | |
mov eax,0 | |
pop edi | |
pop esi | |
pop ebx | |
pop ebp | |
ret | |
global _OPENSSL_instrument_bus2 | |
align 16 | |
_OPENSSL_instrument_bus2: | |
L$_OPENSSL_instrument_bus2_begin: | |
push ebp | |
push ebx | |
push esi | |
push edi | |
mov eax,0 | |
pop edi | |
pop esi | |
pop ebx | |
pop ebp | |
ret | |
global _OPENSSL_ia32_rdrand_bytes | |
align 16 | |
_OPENSSL_ia32_rdrand_bytes: | |
L$_OPENSSL_ia32_rdrand_bytes_begin: | |
push edi | |
push ebx | |
xor eax,eax | |
mov edi,DWORD [12+esp] | |
mov ebx,DWORD [16+esp] | |
cmp ebx,0 | |
je NEAR L$021done | |
mov ecx,8 | |
L$022loop: | |
db 15,199,242 | |
jc NEAR L$023break | |
loop L$022loop | |
jmp NEAR L$021done | |
align 16 | |
L$023break: | |
cmp ebx,4 | |
jb NEAR L$024tail | |
mov DWORD [edi],edx | |
lea edi,[4+edi] | |
add eax,4 | |
sub ebx,4 | |
jz NEAR L$021done | |
mov ecx,8 | |
jmp NEAR L$022loop | |
align 16 | |
L$024tail: | |
mov BYTE [edi],dl | |
lea edi,[1+edi] | |
inc eax | |
shr edx,8 | |
dec ebx | |
jnz NEAR L$024tail | |
L$021done: | |
xor edx,edx | |
pop ebx | |
pop edi | |
ret | |
global _OPENSSL_ia32_rdseed_bytes | |
align 16 | |
_OPENSSL_ia32_rdseed_bytes: | |
L$_OPENSSL_ia32_rdseed_bytes_begin: | |
push edi | |
push ebx | |
xor eax,eax | |
mov edi,DWORD [12+esp] | |
mov ebx,DWORD [16+esp] | |
cmp ebx,0 | |
je NEAR L$025done | |
mov ecx,8 | |
L$026loop: | |
db 15,199,250 | |
jc NEAR L$027break | |
loop L$026loop | |
jmp NEAR L$025done | |
align 16 | |
L$027break: | |
cmp ebx,4 | |
jb NEAR L$028tail | |
mov DWORD [edi],edx | |
lea edi,[4+edi] | |
add eax,4 | |
sub ebx,4 | |
jz NEAR L$025done | |
mov ecx,8 | |
jmp NEAR L$026loop | |
align 16 | |
L$028tail: | |
mov BYTE [edi],dl | |
lea edi,[1+edi] | |
inc eax | |
shr edx,8 | |
dec ebx | |
jnz NEAR L$028tail | |
L$025done: | |
xor edx,edx | |
pop ebx | |
pop edi | |
ret | |
segment .bss | |
common _OPENSSL_ia32cap_P 16 | |
segment .CRT$XCU data align=4 | |
extern _OPENSSL_cpuid_setup | |
dd _OPENSSL_cpuid_setup |