OPTION DOTNAME EXTERN OPENSSL_cpuid_setup:NEAR <<<<<<< HEAD ======= >>>>>>> openssl: regenerate asm files for openssl 1.0.1 .CRT$XCU SEGMENT READONLY ALIGN(8) DQ OPENSSL_cpuid_setup .CRT$XCU ENDS _DATA SEGMENT COMM OPENSSL_ia32cap_P:DWORD:2 _DATA ENDS .text$ SEGMENT ALIGN(64) 'CODE' PUBLIC OPENSSL_atomic_add ALIGN 16 OPENSSL_atomic_add PROC PUBLIC mov eax,DWORD PTR[rcx] $L$spin:: lea r8,QWORD PTR[rax*1+rdx] DB 0f0h cmpxchg DWORD PTR[rcx],r8d jne $L$spin mov eax,r8d DB 048h,098h DB 0F3h,0C3h ;repret OPENSSL_atomic_add ENDP PUBLIC OPENSSL_rdtsc ALIGN 16 OPENSSL_rdtsc PROC PUBLIC rdtsc shl rdx,32 or rax,rdx DB 0F3h,0C3h ;repret OPENSSL_rdtsc ENDP PUBLIC OPENSSL_ia32_cpuid ALIGN 16 OPENSSL_ia32_cpuid PROC PUBLIC mov r8,rbx xor eax,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 $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 $L$done:: shl r9,32 mov eax,r10d mov rbx,r8 or rax,r9 DB 0F3h,0C3h ;repret OPENSSL_ia32_cpuid ENDP PUBLIC OPENSSL_cleanse ALIGN 16 OPENSSL_cleanse PROC PUBLIC xor rax,rax cmp rdx,15 jae $L$ot cmp rdx,0 je $L$ret $L$ittle:: mov BYTE PTR[rcx],al sub rdx,1 lea rcx,QWORD PTR[1+rcx] jnz $L$ittle $L$ret:: DB 0F3h,0C3h ;repret ALIGN 16 $L$ot:: test rcx,7 jz $L$aligned mov BYTE PTR[rcx],al lea rdx,QWORD PTR[((-1))+rdx] lea rcx,QWORD PTR[1+rcx] jmp $L$ot $L$aligned:: mov QWORD PTR[rcx],rax lea rdx,QWORD PTR[((-8))+rdx] test rdx,-8 lea rcx,QWORD PTR[8+rcx] jnz $L$aligned cmp rdx,0 jne $L$ittle DB 0F3h,0C3h ;repret OPENSSL_cleanse ENDP PUBLIC OPENSSL_wipe_cpu ALIGN 16 OPENSSL_wipe_cpu PROC PUBLIC pxor xmm0,xmm0 pxor xmm1,xmm1 pxor xmm2,xmm2 pxor xmm3,xmm3 pxor xmm4,xmm4 pxor xmm5,xmm5 xor rcx,rcx xor rdx,rdx xor r8,r8 xor r9,r9 xor r10,r10 xor r11,r11 lea rax,QWORD PTR[8+rsp] DB 0F3h,0C3h ;repret OPENSSL_wipe_cpu ENDP PUBLIC OPENSSL_ia32_rdrand ALIGN 16 OPENSSL_ia32_rdrand PROC PUBLIC mov ecx,8 $L$oop_rdrand:: DB 72,15,199,240 jc $L$break_rdrand loop $L$oop_rdrand $L$break_rdrand:: cmp rax,0 cmove rax,rcx DB 0F3h,0C3h ;repret OPENSSL_ia32_rdrand ENDP .text$ ENDS END