summaryrefslogtreecommitdiff
path: root/deps/openssl/config/archs/VC-WIN32/asm/crypto/x86cpuid.asm
diff options
context:
space:
mode:
Diffstat (limited to 'deps/openssl/config/archs/VC-WIN32/asm/crypto/x86cpuid.asm')
-rw-r--r--deps/openssl/config/archs/VC-WIN32/asm/crypto/x86cpuid.asm555
1 files changed, 555 insertions, 0 deletions
diff --git a/deps/openssl/config/archs/VC-WIN32/asm/crypto/x86cpuid.asm b/deps/openssl/config/archs/VC-WIN32/asm/crypto/x86cpuid.asm
new file mode 100644
index 0000000000..be679e47b3
--- /dev/null
+++ b/deps/openssl/config/archs/VC-WIN32/asm/crypto/x86cpuid.asm
@@ -0,0 +1,555 @@
+%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
+ and ecx,83886080
+ cmp ecx,83886080
+ jne NEAR L$014no_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
+L$014no_sse2:
+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$015spin:
+ lea ebx,[ecx*1+eax]
+ nop
+dd 447811568
+ jne NEAR L$015spin
+ mov eax,ebx
+ pop ebx
+ ret
+global _OPENSSL_indirect_call
+align 16
+_OPENSSL_indirect_call:
+L$_OPENSSL_indirect_call_begin:
+ push ebp
+ mov ebp,esp
+ sub esp,28
+ mov ecx,DWORD [12+ebp]
+ mov DWORD [esp],ecx
+ mov edx,DWORD [16+ebp]
+ mov DWORD [4+esp],edx
+ mov eax,DWORD [20+ebp]
+ mov DWORD [8+esp],eax
+ mov eax,DWORD [24+ebp]
+ mov DWORD [12+esp],eax
+ mov eax,DWORD [28+ebp]
+ mov DWORD [16+esp],eax
+ mov eax,DWORD [32+ebp]
+ mov DWORD [20+esp],eax
+ mov eax,DWORD [36+ebp]
+ mov DWORD [24+esp],eax
+ call DWORD [8+ebp]
+ mov esp,ebp
+ pop ebp
+ 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$016lot
+ cmp ecx,0
+ je NEAR L$017ret
+L$018little:
+ mov BYTE [edx],al
+ sub ecx,1
+ lea edx,[1+edx]
+ jnz NEAR L$018little
+L$017ret:
+ ret
+align 16
+L$016lot:
+ test edx,3
+ jz NEAR L$019aligned
+ mov BYTE [edx],al
+ lea ecx,[ecx-1]
+ lea edx,[1+edx]
+ jmp NEAR L$016lot
+L$019aligned:
+ mov DWORD [edx],eax
+ lea ecx,[ecx-4]
+ test ecx,-4
+ lea edx,[4+edx]
+ jnz NEAR L$019aligned
+ cmp ecx,0
+ jne NEAR L$018little
+ 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$020no_data
+L$021loop:
+ mov dl,BYTE [esi]
+ lea esi,[1+esi]
+ xor dl,BYTE [edi]
+ lea edi,[1+edi]
+ or al,dl
+ dec ecx
+ jnz NEAR L$021loop
+ neg eax
+ shr eax,31
+L$020no_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
+ lea edx,[_OPENSSL_ia32cap_P]
+ bt DWORD [edx],4
+ jnc NEAR L$022nogo
+ bt DWORD [edx],19
+ jnc NEAR L$022nogo
+ mov edi,DWORD [20+esp]
+ mov ecx,DWORD [24+esp]
+ rdtsc
+ mov esi,eax
+ mov ebx,0
+ clflush [edi]
+db 240
+ add DWORD [edi],ebx
+ jmp NEAR L$023loop
+align 16
+L$023loop:
+ rdtsc
+ mov edx,eax
+ sub eax,esi
+ mov esi,edx
+ mov ebx,eax
+ clflush [edi]
+db 240
+ add DWORD [edi],eax
+ lea edi,[4+edi]
+ sub ecx,1
+ jnz NEAR L$023loop
+ mov eax,DWORD [24+esp]
+L$022nogo:
+ 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
+ lea edx,[_OPENSSL_ia32cap_P]
+ bt DWORD [edx],4
+ jnc NEAR L$024nogo
+ bt DWORD [edx],19
+ jnc NEAR L$024nogo
+ mov edi,DWORD [20+esp]
+ mov ecx,DWORD [24+esp]
+ mov ebp,DWORD [28+esp]
+ rdtsc
+ mov esi,eax
+ mov ebx,0
+ clflush [edi]
+db 240
+ add DWORD [edi],ebx
+ rdtsc
+ mov edx,eax
+ sub eax,esi
+ mov esi,edx
+ mov ebx,eax
+ jmp NEAR L$025loop2
+align 16
+L$025loop2:
+ clflush [edi]
+db 240
+ add DWORD [edi],eax
+ sub ebp,1
+ jz NEAR L$026done2
+ rdtsc
+ mov edx,eax
+ sub eax,esi
+ mov esi,edx
+ cmp eax,ebx
+ mov ebx,eax
+ mov edx,0
+ setne dl
+ sub ecx,edx
+ lea edi,[edx*4+edi]
+ jnz NEAR L$025loop2
+L$026done2:
+ mov eax,DWORD [24+esp]
+ sub eax,ecx
+L$024nogo:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+global _OPENSSL_ia32_rdrand
+align 16
+_OPENSSL_ia32_rdrand:
+L$_OPENSSL_ia32_rdrand_begin:
+ mov ecx,8
+L$027loop:
+db 15,199,240
+ jc NEAR L$028break
+ loop L$027loop
+L$028break:
+ cmp eax,0
+ cmove eax,ecx
+ 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$029done
+ mov ecx,8
+L$030loop:
+db 15,199,242
+ jc NEAR L$031break
+ loop L$030loop
+ jmp NEAR L$029done
+align 16
+L$031break:
+ cmp ebx,4
+ jb NEAR L$032tail
+ mov DWORD [edi],edx
+ lea edi,[4+edi]
+ add eax,4
+ sub ebx,4
+ jz NEAR L$029done
+ mov ecx,8
+ jmp NEAR L$030loop
+align 16
+L$032tail:
+ mov BYTE [edi],dl
+ lea edi,[1+edi]
+ inc eax
+ shr edx,8
+ dec ebx
+ jnz NEAR L$032tail
+L$029done:
+ pop ebx
+ pop edi
+ ret
+global _OPENSSL_ia32_rdseed
+align 16
+_OPENSSL_ia32_rdseed:
+L$_OPENSSL_ia32_rdseed_begin:
+ mov ecx,8
+L$033loop:
+db 15,199,248
+ jc NEAR L$034break
+ loop L$033loop
+L$034break:
+ cmp eax,0
+ cmove eax,ecx
+ 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$035done
+ mov ecx,8
+L$036loop:
+db 15,199,250
+ jc NEAR L$037break
+ loop L$036loop
+ jmp NEAR L$035done
+align 16
+L$037break:
+ cmp ebx,4
+ jb NEAR L$038tail
+ mov DWORD [edi],edx
+ lea edi,[4+edi]
+ add eax,4
+ sub ebx,4
+ jz NEAR L$035done
+ mov ecx,8
+ jmp NEAR L$036loop
+align 16
+L$038tail:
+ mov BYTE [edi],dl
+ lea edi,[1+edi]
+ inc eax
+ shr edx,8
+ dec ebx
+ jnz NEAR L$038tail
+L$035done:
+ 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