| Index: third_party/boringssl/win-x86_64/crypto/cpu-x86_64-asm.asm
|
| diff --git a/third_party/boringssl/win-x86_64/crypto/cpu-x86_64-asm.asm b/third_party/boringssl/win-x86_64/crypto/cpu-x86_64-asm.asm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6204dc9b1e7711aa0a4c8f833754bd779de20c3c
|
| --- /dev/null
|
| +++ b/third_party/boringssl/win-x86_64/crypto/cpu-x86_64-asm.asm
|
| @@ -0,0 +1,158 @@
|
| +OPTION DOTNAME
|
| +.text$ SEGMENT ALIGN(64) '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
|
|
|