OPTION DOTNAME .text$ SEGMENT ALIGN(256) 'CODE' PUBLIC OPENSSL_ia32_cpuid ALIGN 16 OPENSSL_ia32_cpuid PROC PUBLIC mov QWORD PTR[8+rsp],rdi ;WIN64 prologue mov QWORD PTR[16+rsp],rsi mov rax,rsp $L$SEH_begin_OPENSSL_ia32_cpuid:: mov rdi,rcx mov rdi,rcx mov r8,rbx xor eax,eax mov DWORD PTR[8+rdi],eax cpuid mov r11d,eax xor eax,eax cmp ebx,0756e6547h setne al mov r9d,eax cmp edx,049656e69h setne al or r9d,eax cmp ecx,06c65746eh setne al or r9d,eax jz $L$intel cmp ebx,068747541h setne al mov r10d,eax cmp edx,069746E65h setne al or r10d,eax cmp ecx,0444D4163h setne al or r10d,eax jnz $L$intel mov eax,080000000h cpuid cmp eax,080000001h jb $L$intel mov r10d,eax mov eax,080000001h cpuid or r9d,ecx and r9d,000000801h cmp r10d,080000008h jb $L$intel mov eax,080000008h cpuid movzx r10,cl inc r10 mov eax,1 cpuid bt edx,28 jnc $L$generic shr ebx,16 cmp bl,r10b ja $L$generic and edx,0efffffffh jmp $L$generic $L$intel:: cmp r11d,4 mov r10d,-1 jb $L$nocacheinfo mov eax,4 mov ecx,0 cpuid mov r10d,eax shr r10d,14 and r10d,0fffh cmp r11d,7 jb $L$nocacheinfo mov eax,7 xor ecx,ecx cpuid mov DWORD PTR[8+rdi],ebx $L$nocacheinfo:: mov eax,1 cpuid and edx,0bfefffffh cmp r9d,0 jne $L$notintel or edx,040000000h and ah,15 cmp ah,15 jne $L$notintel or edx,000100000h $L$notintel:: bt edx,28 jnc $L$generic and edx,0efffffffh cmp r10d,0 je $L$generic or edx,010000000h shr ebx,16 cmp bl,1 ja $L$generic and edx,0efffffffh $L$generic:: and r9d,000000800h and ecx,0fffff7ffh or r9d,ecx mov r10d,edx bt r9d,27 jnc $L$clear_avx xor ecx,ecx DB 00fh,001h,0d0h and eax,6 cmp eax,6 je $L$done $L$clear_avx:: mov eax,0efffe7ffh and r9d,eax and DWORD PTR[8+rdi],0ffffffdfh $L$done:: mov DWORD PTR[4+rdi],r9d mov DWORD PTR[rdi],r10d mov rbx,r8 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue mov rsi,QWORD PTR[16+rsp] DB 0F3h,0C3h ;repret $L$SEH_end_OPENSSL_ia32_cpuid:: OPENSSL_ia32_cpuid ENDP .text$ ENDS END