summaryrefslogtreecommitdiff
path: root/deps/openssl/config/archs/BSD-x86/asm/crypto/x86cpuid.s
diff options
context:
space:
mode:
Diffstat (limited to 'deps/openssl/config/archs/BSD-x86/asm/crypto/x86cpuid.s')
-rw-r--r--deps/openssl/config/archs/BSD-x86/asm/crypto/x86cpuid.s532
1 files changed, 532 insertions, 0 deletions
diff --git a/deps/openssl/config/archs/BSD-x86/asm/crypto/x86cpuid.s b/deps/openssl/config/archs/BSD-x86/asm/crypto/x86cpuid.s
new file mode 100644
index 0000000000..b773c68a59
--- /dev/null
+++ b/deps/openssl/config/archs/BSD-x86/asm/crypto/x86cpuid.s
@@ -0,0 +1,532 @@
+.text
+.globl _OPENSSL_ia32_cpuid
+.type _OPENSSL_ia32_cpuid,@function
+.align 4
+_OPENSSL_ia32_cpuid:
+L_OPENSSL_ia32_cpuid_begin:
+ pushl %ebp
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ xorl %edx,%edx
+ pushfl
+ popl %eax
+ movl %eax,%ecx
+ xorl $2097152,%eax
+ pushl %eax
+ popfl
+ pushfl
+ popl %eax
+ xorl %eax,%ecx
+ xorl %eax,%eax
+ movl 20(%esp),%esi
+ movl %eax,8(%esi)
+ btl $21,%ecx
+ jnc L000nocpuid
+ .byte 0x0f,0xa2
+ movl %eax,%edi
+ xorl %eax,%eax
+ cmpl $1970169159,%ebx
+ setne %al
+ movl %eax,%ebp
+ cmpl $1231384169,%edx
+ setne %al
+ orl %eax,%ebp
+ cmpl $1818588270,%ecx
+ setne %al
+ orl %eax,%ebp
+ jz L001intel
+ cmpl $1752462657,%ebx
+ setne %al
+ movl %eax,%esi
+ cmpl $1769238117,%edx
+ setne %al
+ orl %eax,%esi
+ cmpl $1145913699,%ecx
+ setne %al
+ orl %eax,%esi
+ jnz L001intel
+ movl $2147483648,%eax
+ .byte 0x0f,0xa2
+ cmpl $2147483649,%eax
+ jb L001intel
+ movl %eax,%esi
+ movl $2147483649,%eax
+ .byte 0x0f,0xa2
+ orl %ecx,%ebp
+ andl $2049,%ebp
+ cmpl $2147483656,%esi
+ jb L001intel
+ movl $2147483656,%eax
+ .byte 0x0f,0xa2
+ movzbl %cl,%esi
+ incl %esi
+ movl $1,%eax
+ xorl %ecx,%ecx
+ .byte 0x0f,0xa2
+ btl $28,%edx
+ jnc L002generic
+ shrl $16,%ebx
+ andl $255,%ebx
+ cmpl %esi,%ebx
+ ja L002generic
+ andl $4026531839,%edx
+ jmp L002generic
+L001intel:
+ cmpl $4,%edi
+ movl $-1,%esi
+ jb L003nocacheinfo
+ movl $4,%eax
+ movl $0,%ecx
+ .byte 0x0f,0xa2
+ movl %eax,%esi
+ shrl $14,%esi
+ andl $4095,%esi
+L003nocacheinfo:
+ movl $1,%eax
+ xorl %ecx,%ecx
+ .byte 0x0f,0xa2
+ andl $3220176895,%edx
+ cmpl $0,%ebp
+ jne L004notintel
+ orl $1073741824,%edx
+ andb $15,%ah
+ cmpb $15,%ah
+ jne L004notintel
+ orl $1048576,%edx
+L004notintel:
+ btl $28,%edx
+ jnc L002generic
+ andl $4026531839,%edx
+ cmpl $0,%esi
+ je L002generic
+ orl $268435456,%edx
+ shrl $16,%ebx
+ cmpb $1,%bl
+ ja L002generic
+ andl $4026531839,%edx
+L002generic:
+ andl $2048,%ebp
+ andl $4294965247,%ecx
+ movl %edx,%esi
+ orl %ecx,%ebp
+ cmpl $7,%edi
+ movl 20(%esp),%edi
+ jb L005no_extended_info
+ movl $7,%eax
+ xorl %ecx,%ecx
+ .byte 0x0f,0xa2
+ movl %ebx,8(%edi)
+L005no_extended_info:
+ btl $27,%ebp
+ jnc L006clear_avx
+ xorl %ecx,%ecx
+.byte 15,1,208
+ andl $6,%eax
+ cmpl $6,%eax
+ je L007done
+ cmpl $2,%eax
+ je L006clear_avx
+L008clear_xmm:
+ andl $4261412861,%ebp
+ andl $4278190079,%esi
+L006clear_avx:
+ andl $4026525695,%ebp
+ andl $4294967263,8(%edi)
+L007done:
+ movl %esi,%eax
+ movl %ebp,%edx
+L000nocpuid:
+ popl %edi
+ popl %esi
+ popl %ebx
+ popl %ebp
+ ret
+.globl _OPENSSL_rdtsc
+.type _OPENSSL_rdtsc,@function
+.align 4
+_OPENSSL_rdtsc:
+L_OPENSSL_rdtsc_begin:
+ xorl %eax,%eax
+ xorl %edx,%edx
+ call L009PIC_me_up
+L009PIC_me_up:
+ popl %ecx
+ leal __GLOBAL_OFFSET_TABLE_+[.-L009PIC_me_up](%ecx),%ecx
+ movl _OPENSSL_ia32cap_P@GOT(%ecx),%ecx
+ btl $4,(%ecx)
+ jnc L010notsc
+ .byte 0x0f,0x31
+L010notsc:
+ ret
+.globl _OPENSSL_instrument_halt
+.type _OPENSSL_instrument_halt,@function
+.align 4
+_OPENSSL_instrument_halt:
+L_OPENSSL_instrument_halt_begin:
+ call L011PIC_me_up
+L011PIC_me_up:
+ popl %ecx
+ leal __GLOBAL_OFFSET_TABLE_+[.-L011PIC_me_up](%ecx),%ecx
+ movl _OPENSSL_ia32cap_P@GOT(%ecx),%ecx
+ btl $4,(%ecx)
+ jnc L012nohalt
+.long 2421723150
+ andl $3,%eax
+ jnz L012nohalt
+ pushfl
+ popl %eax
+ btl $9,%eax
+ jnc L012nohalt
+ .byte 0x0f,0x31
+ pushl %edx
+ pushl %eax
+ hlt
+ .byte 0x0f,0x31
+ subl (%esp),%eax
+ sbbl 4(%esp),%edx
+ addl $8,%esp
+ ret
+L012nohalt:
+ xorl %eax,%eax
+ xorl %edx,%edx
+ ret
+.globl _OPENSSL_far_spin
+.type _OPENSSL_far_spin,@function
+.align 4
+_OPENSSL_far_spin:
+L_OPENSSL_far_spin_begin:
+ pushfl
+ popl %eax
+ btl $9,%eax
+ jnc L013nospin
+ movl 4(%esp),%eax
+ movl 8(%esp),%ecx
+.long 2430111262
+ xorl %eax,%eax
+ movl (%ecx),%edx
+ jmp L014spin
+.align 4,0x90
+L014spin:
+ incl %eax
+ cmpl (%ecx),%edx
+ je L014spin
+.long 529567888
+ ret
+L013nospin:
+ xorl %eax,%eax
+ xorl %edx,%edx
+ ret
+.globl _OPENSSL_wipe_cpu
+.type _OPENSSL_wipe_cpu,@function
+.align 4
+_OPENSSL_wipe_cpu:
+L_OPENSSL_wipe_cpu_begin:
+ xorl %eax,%eax
+ xorl %edx,%edx
+ call L015PIC_me_up
+L015PIC_me_up:
+ popl %ecx
+ leal __GLOBAL_OFFSET_TABLE_+[.-L015PIC_me_up](%ecx),%ecx
+ movl _OPENSSL_ia32cap_P@GOT(%ecx),%ecx
+ movl (%ecx),%ecx
+ btl $1,(%ecx)
+ jnc L016no_x87
+ andl $83886080,%ecx
+ cmpl $83886080,%ecx
+ jne L017no_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
+L017no_sse2:
+.long 4007259865,4007259865,4007259865,4007259865,2430851995
+L016no_x87:
+ leal 4(%esp),%eax
+ ret
+.globl _OPENSSL_atomic_add
+.type _OPENSSL_atomic_add,@function
+.align 4
+_OPENSSL_atomic_add:
+L_OPENSSL_atomic_add_begin:
+ movl 4(%esp),%edx
+ movl 8(%esp),%ecx
+ pushl %ebx
+ nop
+ movl (%edx),%eax
+L018spin:
+ leal (%eax,%ecx,1),%ebx
+ nop
+.long 447811568
+ jne L018spin
+ movl %ebx,%eax
+ popl %ebx
+ ret
+.globl _OPENSSL_cleanse
+.type _OPENSSL_cleanse,@function
+.align 4
+_OPENSSL_cleanse:
+L_OPENSSL_cleanse_begin:
+ movl 4(%esp),%edx
+ movl 8(%esp),%ecx
+ xorl %eax,%eax
+ cmpl $7,%ecx
+ jae L019lot
+ cmpl $0,%ecx
+ je L020ret
+L021little:
+ movb %al,(%edx)
+ subl $1,%ecx
+ leal 1(%edx),%edx
+ jnz L021little
+L020ret:
+ ret
+.align 4,0x90
+L019lot:
+ testl $3,%edx
+ jz L022aligned
+ movb %al,(%edx)
+ leal -1(%ecx),%ecx
+ leal 1(%edx),%edx
+ jmp L019lot
+L022aligned:
+ movl %eax,(%edx)
+ leal -4(%ecx),%ecx
+ testl $-4,%ecx
+ leal 4(%edx),%edx
+ jnz L022aligned
+ cmpl $0,%ecx
+ jne L021little
+ ret
+.globl _CRYPTO_memcmp
+.type _CRYPTO_memcmp,@function
+.align 4
+_CRYPTO_memcmp:
+L_CRYPTO_memcmp_begin:
+ pushl %esi
+ pushl %edi
+ movl 12(%esp),%esi
+ movl 16(%esp),%edi
+ movl 20(%esp),%ecx
+ xorl %eax,%eax
+ xorl %edx,%edx
+ cmpl $0,%ecx
+ je L023no_data
+L024loop:
+ movb (%esi),%dl
+ leal 1(%esi),%esi
+ xorb (%edi),%dl
+ leal 1(%edi),%edi
+ orb %dl,%al
+ decl %ecx
+ jnz L024loop
+ negl %eax
+ shrl $31,%eax
+L023no_data:
+ popl %edi
+ popl %esi
+ ret
+.globl _OPENSSL_instrument_bus
+.type _OPENSSL_instrument_bus,@function
+.align 4
+_OPENSSL_instrument_bus:
+L_OPENSSL_instrument_bus_begin:
+ pushl %ebp
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl $0,%eax
+ call L025PIC_me_up
+L025PIC_me_up:
+ popl %edx
+ leal __GLOBAL_OFFSET_TABLE_+[.-L025PIC_me_up](%edx),%edx
+ movl _OPENSSL_ia32cap_P@GOT(%edx),%edx
+ btl $4,(%edx)
+ jnc L026nogo
+ btl $19,(%edx)
+ jnc L026nogo
+ movl 20(%esp),%edi
+ movl 24(%esp),%ecx
+ .byte 0x0f,0x31
+ movl %eax,%esi
+ movl $0,%ebx
+ clflush (%edi)
+.byte 240
+ addl %ebx,(%edi)
+ jmp L027loop
+.align 4,0x90
+L027loop:
+ .byte 0x0f,0x31
+ movl %eax,%edx
+ subl %esi,%eax
+ movl %edx,%esi
+ movl %eax,%ebx
+ clflush (%edi)
+.byte 240
+ addl %eax,(%edi)
+ leal 4(%edi),%edi
+ subl $1,%ecx
+ jnz L027loop
+ movl 24(%esp),%eax
+L026nogo:
+ popl %edi
+ popl %esi
+ popl %ebx
+ popl %ebp
+ ret
+.globl _OPENSSL_instrument_bus2
+.type _OPENSSL_instrument_bus2,@function
+.align 4
+_OPENSSL_instrument_bus2:
+L_OPENSSL_instrument_bus2_begin:
+ pushl %ebp
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ movl $0,%eax
+ call L028PIC_me_up
+L028PIC_me_up:
+ popl %edx
+ leal __GLOBAL_OFFSET_TABLE_+[.-L028PIC_me_up](%edx),%edx
+ movl _OPENSSL_ia32cap_P@GOT(%edx),%edx
+ btl $4,(%edx)
+ jnc L029nogo
+ btl $19,(%edx)
+ jnc L029nogo
+ movl 20(%esp),%edi
+ movl 24(%esp),%ecx
+ movl 28(%esp),%ebp
+ .byte 0x0f,0x31
+ movl %eax,%esi
+ movl $0,%ebx
+ clflush (%edi)
+.byte 240
+ addl %ebx,(%edi)
+ .byte 0x0f,0x31
+ movl %eax,%edx
+ subl %esi,%eax
+ movl %edx,%esi
+ movl %eax,%ebx
+ jmp L030loop2
+.align 4,0x90
+L030loop2:
+ clflush (%edi)
+.byte 240
+ addl %eax,(%edi)
+ subl $1,%ebp
+ jz L031done2
+ .byte 0x0f,0x31
+ movl %eax,%edx
+ subl %esi,%eax
+ movl %edx,%esi
+ cmpl %ebx,%eax
+ movl %eax,%ebx
+ movl $0,%edx
+ setne %dl
+ subl %edx,%ecx
+ leal (%edi,%edx,4),%edi
+ jnz L030loop2
+L031done2:
+ movl 24(%esp),%eax
+ subl %ecx,%eax
+L029nogo:
+ popl %edi
+ popl %esi
+ popl %ebx
+ popl %ebp
+ ret
+.globl _OPENSSL_ia32_rdrand_bytes
+.type _OPENSSL_ia32_rdrand_bytes,@function
+.align 4
+_OPENSSL_ia32_rdrand_bytes:
+L_OPENSSL_ia32_rdrand_bytes_begin:
+ pushl %edi
+ pushl %ebx
+ xorl %eax,%eax
+ movl 12(%esp),%edi
+ movl 16(%esp),%ebx
+ cmpl $0,%ebx
+ je L032done
+ movl $8,%ecx
+L033loop:
+.byte 15,199,242
+ jc L034break
+ loop L033loop
+ jmp L032done
+.align 4,0x90
+L034break:
+ cmpl $4,%ebx
+ jb L035tail
+ movl %edx,(%edi)
+ leal 4(%edi),%edi
+ addl $4,%eax
+ subl $4,%ebx
+ jz L032done
+ movl $8,%ecx
+ jmp L033loop
+.align 4,0x90
+L035tail:
+ movb %dl,(%edi)
+ leal 1(%edi),%edi
+ incl %eax
+ shrl $8,%edx
+ decl %ebx
+ jnz L035tail
+L032done:
+ xorl %edx,%edx
+ popl %ebx
+ popl %edi
+ ret
+.globl _OPENSSL_ia32_rdseed_bytes
+.type _OPENSSL_ia32_rdseed_bytes,@function
+.align 4
+_OPENSSL_ia32_rdseed_bytes:
+L_OPENSSL_ia32_rdseed_bytes_begin:
+ pushl %edi
+ pushl %ebx
+ xorl %eax,%eax
+ movl 12(%esp),%edi
+ movl 16(%esp),%ebx
+ cmpl $0,%ebx
+ je L036done
+ movl $8,%ecx
+L037loop:
+.byte 15,199,250
+ jc L038break
+ loop L037loop
+ jmp L036done
+.align 4,0x90
+L038break:
+ cmpl $4,%ebx
+ jb L039tail
+ movl %edx,(%edi)
+ leal 4(%edi),%edi
+ addl $4,%eax
+ subl $4,%ebx
+ jz L036done
+ movl $8,%ecx
+ jmp L037loop
+.align 4,0x90
+L039tail:
+ movb %dl,(%edi)
+ leal 1(%edi),%edi
+ incl %eax
+ shrl $8,%edx
+ decl %ebx
+ jnz L039tail
+L036done:
+ xorl %edx,%edx
+ popl %ebx
+ popl %edi
+ ret
+.comm _OPENSSL_ia32cap_P,16
+.text
+.type __GLOBAL_$I$_OPENSSL_cpuid_setup,@function
+.globl __GLOBAL_$I$_OPENSSL_cpuid_setup
+.align 2
+__GLOBAL_$I$_OPENSSL_cpuid_setup:
+ jmp _OPENSSL_cpuid_setup