diff options
Diffstat (limited to 'main/openssl/crypto/x86cpuid.S')
| -rw-r--r-- | main/openssl/crypto/x86cpuid.S | 334 | 
1 files changed, 334 insertions, 0 deletions
| diff --git a/main/openssl/crypto/x86cpuid.S b/main/openssl/crypto/x86cpuid.S new file mode 100644 index 00000000..73b5d98e --- /dev/null +++ b/main/openssl/crypto/x86cpuid.S @@ -0,0 +1,334 @@ +.file	"x86cpuid.s" +.text +.globl	OPENSSL_ia32_cpuid +.type	OPENSSL_ia32_cpuid,@function +.align	16 +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 +	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,%edi +	jb	.L003nocacheinfo +	movl	$4,%eax +	movl	$0,%ecx +	.byte	0x0f,0xa2 +	movl	%eax,%edi +	shrl	$14,%edi +	andl	$4095,%edi +.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,%edi +	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 +	btl	$27,%ecx +	jnc	.L005clear_avx +	xorl	%ecx,%ecx +.byte	15,1,208 +	andl	$6,%eax +	cmpl	$6,%eax +	je	.L006done +	cmpl	$2,%eax +	je	.L005clear_avx +.L007clear_xmm: +	andl	$4261412861,%ebp +	andl	$4278190079,%esi +.L005clear_avx: +	andl	$4026525695,%ebp +.L006done: +	movl	%esi,%eax +	movl	%ebp,%edx +.L000nocpuid: +	popl	%edi +	popl	%esi +	popl	%ebx +	popl	%ebp +	ret +.size	OPENSSL_ia32_cpuid,.-.L_OPENSSL_ia32_cpuid_begin +.globl	OPENSSL_rdtsc +.type	OPENSSL_rdtsc,@function +.align	16 +OPENSSL_rdtsc: +.L_OPENSSL_rdtsc_begin: +	xorl	%eax,%eax +	xorl	%edx,%edx +	call	.L008PIC_me_up +.L008PIC_me_up: +	popl	%ecx +	leal	_GLOBAL_OFFSET_TABLE_+[.-.L008PIC_me_up](%ecx),%ecx +	movl	OPENSSL_ia32cap_P@GOT(%ecx),%ecx +	btl	$4,(%ecx) +	jnc	.L009notsc +	.byte	0x0f,0x31 +.L009notsc: +	ret +.size	OPENSSL_rdtsc,.-.L_OPENSSL_rdtsc_begin +.globl	OPENSSL_instrument_halt +.type	OPENSSL_instrument_halt,@function +.align	16 +OPENSSL_instrument_halt: +.L_OPENSSL_instrument_halt_begin: +	call	.L010PIC_me_up +.L010PIC_me_up: +	popl	%ecx +	leal	_GLOBAL_OFFSET_TABLE_+[.-.L010PIC_me_up](%ecx),%ecx +	movl	OPENSSL_ia32cap_P@GOT(%ecx),%ecx +	btl	$4,(%ecx) +	jnc	.L011nohalt +.long	2421723150 +	andl	$3,%eax +	jnz	.L011nohalt +	pushfl +	popl	%eax +	btl	$9,%eax +	jnc	.L011nohalt +	.byte	0x0f,0x31 +	pushl	%edx +	pushl	%eax +	hlt +	.byte	0x0f,0x31 +	subl	(%esp),%eax +	sbbl	4(%esp),%edx +	addl	$8,%esp +	ret +.L011nohalt: +	xorl	%eax,%eax +	xorl	%edx,%edx +	ret +.size	OPENSSL_instrument_halt,.-.L_OPENSSL_instrument_halt_begin +.globl	OPENSSL_far_spin +.type	OPENSSL_far_spin,@function +.align	16 +OPENSSL_far_spin: +.L_OPENSSL_far_spin_begin: +	pushfl +	popl	%eax +	btl	$9,%eax +	jnc	.L012nospin +	movl	4(%esp),%eax +	movl	8(%esp),%ecx +.long	2430111262 +	xorl	%eax,%eax +	movl	(%ecx),%edx +	jmp	.L013spin +.align	16 +.L013spin: +	incl	%eax +	cmpl	(%ecx),%edx +	je	.L013spin +.long	529567888 +	ret +.L012nospin: +	xorl	%eax,%eax +	xorl	%edx,%edx +	ret +.size	OPENSSL_far_spin,.-.L_OPENSSL_far_spin_begin +.globl	OPENSSL_wipe_cpu +.type	OPENSSL_wipe_cpu,@function +.align	16 +OPENSSL_wipe_cpu: +.L_OPENSSL_wipe_cpu_begin: +	xorl	%eax,%eax +	xorl	%edx,%edx +	call	.L014PIC_me_up +.L014PIC_me_up: +	popl	%ecx +	leal	_GLOBAL_OFFSET_TABLE_+[.-.L014PIC_me_up](%ecx),%ecx +	movl	OPENSSL_ia32cap_P@GOT(%ecx),%ecx +	movl	(%ecx),%ecx +	btl	$1,(%ecx) +	jnc	.L015no_x87 +.long	4007259865,4007259865,4007259865,4007259865,2430851995 +.L015no_x87: +	leal	4(%esp),%eax +	ret +.size	OPENSSL_wipe_cpu,.-.L_OPENSSL_wipe_cpu_begin +.globl	OPENSSL_atomic_add +.type	OPENSSL_atomic_add,@function +.align	16 +OPENSSL_atomic_add: +.L_OPENSSL_atomic_add_begin: +	movl	4(%esp),%edx +	movl	8(%esp),%ecx +	pushl	%ebx +	nop +	movl	(%edx),%eax +.L016spin: +	leal	(%eax,%ecx,1),%ebx +	nop +.long	447811568 +	jne	.L016spin +	movl	%ebx,%eax +	popl	%ebx +	ret +.size	OPENSSL_atomic_add,.-.L_OPENSSL_atomic_add_begin +.globl	OPENSSL_indirect_call +.type	OPENSSL_indirect_call,@function +.align	16 +OPENSSL_indirect_call: +.L_OPENSSL_indirect_call_begin: +	pushl	%ebp +	movl	%esp,%ebp +	subl	$28,%esp +	movl	12(%ebp),%ecx +	movl	%ecx,(%esp) +	movl	16(%ebp),%edx +	movl	%edx,4(%esp) +	movl	20(%ebp),%eax +	movl	%eax,8(%esp) +	movl	24(%ebp),%eax +	movl	%eax,12(%esp) +	movl	28(%ebp),%eax +	movl	%eax,16(%esp) +	movl	32(%ebp),%eax +	movl	%eax,20(%esp) +	movl	36(%ebp),%eax +	movl	%eax,24(%esp) +	call	*8(%ebp) +	movl	%ebp,%esp +	popl	%ebp +	ret +.size	OPENSSL_indirect_call,.-.L_OPENSSL_indirect_call_begin +.globl	OPENSSL_cleanse +.type	OPENSSL_cleanse,@function +.align	16 +OPENSSL_cleanse: +.L_OPENSSL_cleanse_begin: +	movl	4(%esp),%edx +	movl	8(%esp),%ecx +	xorl	%eax,%eax +	cmpl	$7,%ecx +	jae	.L017lot +	cmpl	$0,%ecx +	je	.L018ret +.L019little: +	movb	%al,(%edx) +	subl	$1,%ecx +	leal	1(%edx),%edx +	jnz	.L019little +.L018ret: +	ret +.align	16 +.L017lot: +	testl	$3,%edx +	jz	.L020aligned +	movb	%al,(%edx) +	leal	-1(%ecx),%ecx +	leal	1(%edx),%edx +	jmp	.L017lot +.L020aligned: +	movl	%eax,(%edx) +	leal	-4(%ecx),%ecx +	testl	$-4,%ecx +	leal	4(%edx),%edx +	jnz	.L020aligned +	cmpl	$0,%ecx +	jne	.L019little +	ret +.size	OPENSSL_cleanse,.-.L_OPENSSL_cleanse_begin +.globl	OPENSSL_ia32_rdrand +.type	OPENSSL_ia32_rdrand,@function +.align	16 +OPENSSL_ia32_rdrand: +.L_OPENSSL_ia32_rdrand_begin: +	movl	$8,%ecx +.L021loop: +.byte	15,199,240 +	jc	.L022break +	loop	.L021loop +.L022break: +	cmpl	$0,%eax +	cmovel	%ecx,%eax +	ret +.size	OPENSSL_ia32_rdrand,.-.L_OPENSSL_ia32_rdrand_begin +.comm	OPENSSL_ia32cap_P,8,4 +.section	.init +	call	OPENSSL_cpuid_setup | 
