diff options
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.s | 532 |
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 |