Home | History | Annotate | Download | only in crypto
      1 #if defined(__i386__)
      2 .file	"crypto/cpu-x86-asm.S"
      3 .text
      4 .globl	OPENSSL_ia32_cpuid
      5 .hidden	OPENSSL_ia32_cpuid
      6 .type	OPENSSL_ia32_cpuid,@function
      7 .align	16
      8 OPENSSL_ia32_cpuid:
      9 .L_OPENSSL_ia32_cpuid_begin:
     10 	pushl	%ebp
     11 	pushl	%ebx
     12 	pushl	%esi
     13 	pushl	%edi
     14 	xorl	%edx,%edx
     15 	pushfl
     16 	popl	%eax
     17 	movl	%eax,%ecx
     18 	xorl	$2097152,%eax
     19 	pushl	%eax
     20 	popfl
     21 	pushfl
     22 	popl	%eax
     23 	xorl	%eax,%ecx
     24 	xorl	%eax,%eax
     25 	btl	$21,%ecx
     26 	jnc	.L000nocpuid
     27 	movl	20(%esp),%esi
     28 	movl	%eax,8(%esi)
     29 	.byte	0x0f,0xa2
     30 	movl	%eax,%edi
     31 	xorl	%eax,%eax
     32 	cmpl	$1970169159,%ebx
     33 	setne	%al
     34 	movl	%eax,%ebp
     35 	cmpl	$1231384169,%edx
     36 	setne	%al
     37 	orl	%eax,%ebp
     38 	cmpl	$1818588270,%ecx
     39 	setne	%al
     40 	orl	%eax,%ebp
     41 	jz	.L001intel
     42 	cmpl	$1752462657,%ebx
     43 	setne	%al
     44 	movl	%eax,%esi
     45 	cmpl	$1769238117,%edx
     46 	setne	%al
     47 	orl	%eax,%esi
     48 	cmpl	$1145913699,%ecx
     49 	setne	%al
     50 	orl	%eax,%esi
     51 	jnz	.L001intel
     52 	movl	$2147483648,%eax
     53 	.byte	0x0f,0xa2
     54 	cmpl	$2147483649,%eax
     55 	jb	.L001intel
     56 	movl	%eax,%esi
     57 	movl	$2147483649,%eax
     58 	.byte	0x0f,0xa2
     59 	orl	%ecx,%ebp
     60 	andl	$2049,%ebp
     61 	cmpl	$2147483656,%esi
     62 	jb	.L001intel
     63 	movl	$2147483656,%eax
     64 	.byte	0x0f,0xa2
     65 	movzbl	%cl,%esi
     66 	incl	%esi
     67 	movl	$1,%eax
     68 	xorl	%ecx,%ecx
     69 	.byte	0x0f,0xa2
     70 	btl	$28,%edx
     71 	jnc	.L002generic
     72 	shrl	$16,%ebx
     73 	andl	$255,%ebx
     74 	cmpl	%esi,%ebx
     75 	ja	.L002generic
     76 	andl	$4026531839,%edx
     77 	jmp	.L002generic
     78 .L001intel:
     79 	cmpl	$7,%edi
     80 	jb	.L003cacheinfo
     81 	movl	20(%esp),%esi
     82 	movl	$7,%eax
     83 	xorl	%ecx,%ecx
     84 	.byte	0x0f,0xa2
     85 	movl	%ebx,8(%esi)
     86 .L003cacheinfo:
     87 	cmpl	$4,%edi
     88 	movl	$-1,%edi
     89 	jb	.L004nocacheinfo
     90 	movl	$4,%eax
     91 	movl	$0,%ecx
     92 	.byte	0x0f,0xa2
     93 	movl	%eax,%edi
     94 	shrl	$14,%edi
     95 	andl	$4095,%edi
     96 .L004nocacheinfo:
     97 	movl	$1,%eax
     98 	xorl	%ecx,%ecx
     99 	.byte	0x0f,0xa2
    100 	andl	$3220176895,%edx
    101 	cmpl	$0,%ebp
    102 	jne	.L005notintel
    103 	orl	$1073741824,%edx
    104 	andb	$15,%ah
    105 	cmpb	$15,%ah
    106 	jne	.L005notintel
    107 	orl	$1048576,%edx
    108 .L005notintel:
    109 	btl	$28,%edx
    110 	jnc	.L002generic
    111 	andl	$4026531839,%edx
    112 	cmpl	$0,%edi
    113 	je	.L002generic
    114 	orl	$268435456,%edx
    115 	shrl	$16,%ebx
    116 	cmpb	$1,%bl
    117 	ja	.L002generic
    118 	andl	$4026531839,%edx
    119 .L002generic:
    120 	andl	$2048,%ebp
    121 	andl	$4294965247,%ecx
    122 	movl	%edx,%esi
    123 	orl	%ecx,%ebp
    124 	btl	$27,%ecx
    125 	jnc	.L006clear_avx
    126 	xorl	%ecx,%ecx
    127 .byte	15,1,208
    128 	andl	$6,%eax
    129 	cmpl	$6,%eax
    130 	je	.L007done
    131 	cmpl	$2,%eax
    132 	je	.L006clear_avx
    133 .L008clear_xmm:
    134 	andl	$4261412861,%ebp
    135 	andl	$4278190079,%esi
    136 .L006clear_avx:
    137 	andl	$4026525695,%ebp
    138 	movl	20(%esp),%edi
    139 	andl	$4294967263,8(%edi)
    140 .L007done:
    141 	movl	%esi,%eax
    142 	movl	%ebp,%edx
    143 .L000nocpuid:
    144 	popl	%edi
    145 	popl	%esi
    146 	popl	%ebx
    147 	popl	%ebp
    148 	ret
    149 .size	OPENSSL_ia32_cpuid,.-.L_OPENSSL_ia32_cpuid_begin
    150 .globl	OPENSSL_rdtsc
    151 .hidden	OPENSSL_rdtsc
    152 .type	OPENSSL_rdtsc,@function
    153 .align	16
    154 OPENSSL_rdtsc:
    155 .L_OPENSSL_rdtsc_begin:
    156 	xorl	%eax,%eax
    157 	xorl	%edx,%edx
    158 	call	.L009PIC_me_up
    159 .L009PIC_me_up:
    160 	popl	%ecx
    161 	leal	OPENSSL_ia32cap_P-.L009PIC_me_up(%ecx),%ecx
    162 	btl	$4,(%ecx)
    163 	jnc	.L010notsc
    164 	.byte	0x0f,0x31
    165 .L010notsc:
    166 	ret
    167 .size	OPENSSL_rdtsc,.-.L_OPENSSL_rdtsc_begin
    168 .globl	OPENSSL_instrument_halt
    169 .hidden	OPENSSL_instrument_halt
    170 .type	OPENSSL_instrument_halt,@function
    171 .align	16
    172 OPENSSL_instrument_halt:
    173 .L_OPENSSL_instrument_halt_begin:
    174 	call	.L011PIC_me_up
    175 .L011PIC_me_up:
    176 	popl	%ecx
    177 	leal	OPENSSL_ia32cap_P-.L011PIC_me_up(%ecx),%ecx
    178 	btl	$4,(%ecx)
    179 	jnc	.L012nohalt
    180 .long	2421723150
    181 	andl	$3,%eax
    182 	jnz	.L012nohalt
    183 	pushfl
    184 	popl	%eax
    185 	btl	$9,%eax
    186 	jnc	.L012nohalt
    187 	.byte	0x0f,0x31
    188 	pushl	%edx
    189 	pushl	%eax
    190 	hlt
    191 	.byte	0x0f,0x31
    192 	subl	(%esp),%eax
    193 	sbbl	4(%esp),%edx
    194 	addl	$8,%esp
    195 	ret
    196 .L012nohalt:
    197 	xorl	%eax,%eax
    198 	xorl	%edx,%edx
    199 	ret
    200 .size	OPENSSL_instrument_halt,.-.L_OPENSSL_instrument_halt_begin
    201 .globl	OPENSSL_far_spin
    202 .hidden	OPENSSL_far_spin
    203 .type	OPENSSL_far_spin,@function
    204 .align	16
    205 OPENSSL_far_spin:
    206 .L_OPENSSL_far_spin_begin:
    207 	pushfl
    208 	popl	%eax
    209 	btl	$9,%eax
    210 	jnc	.L013nospin
    211 	movl	4(%esp),%eax
    212 	movl	8(%esp),%ecx
    213 .long	2430111262
    214 	xorl	%eax,%eax
    215 	movl	(%ecx),%edx
    216 	jmp	.L014spin
    217 .align	16
    218 .L014spin:
    219 	incl	%eax
    220 	cmpl	(%ecx),%edx
    221 	je	.L014spin
    222 .long	529567888
    223 	ret
    224 .L013nospin:
    225 	xorl	%eax,%eax
    226 	xorl	%edx,%edx
    227 	ret
    228 .size	OPENSSL_far_spin,.-.L_OPENSSL_far_spin_begin
    229 .globl	OPENSSL_wipe_cpu
    230 .hidden	OPENSSL_wipe_cpu
    231 .type	OPENSSL_wipe_cpu,@function
    232 .align	16
    233 OPENSSL_wipe_cpu:
    234 .L_OPENSSL_wipe_cpu_begin:
    235 	xorl	%eax,%eax
    236 	xorl	%edx,%edx
    237 	call	.L015PIC_me_up
    238 .L015PIC_me_up:
    239 	popl	%ecx
    240 	leal	OPENSSL_ia32cap_P-.L015PIC_me_up(%ecx),%ecx
    241 	movl	(%ecx),%ecx
    242 	btl	$1,(%ecx)
    243 	jnc	.L016no_x87
    244 .long	4007259865,4007259865,4007259865,4007259865,2430851995
    245 .L016no_x87:
    246 	leal	4(%esp),%eax
    247 	ret
    248 .size	OPENSSL_wipe_cpu,.-.L_OPENSSL_wipe_cpu_begin
    249 .globl	OPENSSL_atomic_add
    250 .hidden	OPENSSL_atomic_add
    251 .type	OPENSSL_atomic_add,@function
    252 .align	16
    253 OPENSSL_atomic_add:
    254 .L_OPENSSL_atomic_add_begin:
    255 	movl	4(%esp),%edx
    256 	movl	8(%esp),%ecx
    257 	pushl	%ebx
    258 	nop
    259 	movl	(%edx),%eax
    260 .L017spin:
    261 	leal	(%eax,%ecx,1),%ebx
    262 	nop
    263 .long	447811568
    264 	jne	.L017spin
    265 	movl	%ebx,%eax
    266 	popl	%ebx
    267 	ret
    268 .size	OPENSSL_atomic_add,.-.L_OPENSSL_atomic_add_begin
    269 .globl	OPENSSL_indirect_call
    270 .hidden	OPENSSL_indirect_call
    271 .type	OPENSSL_indirect_call,@function
    272 .align	16
    273 OPENSSL_indirect_call:
    274 .L_OPENSSL_indirect_call_begin:
    275 	pushl	%ebp
    276 	movl	%esp,%ebp
    277 	subl	$28,%esp
    278 	movl	12(%ebp),%ecx
    279 	movl	%ecx,(%esp)
    280 	movl	16(%ebp),%edx
    281 	movl	%edx,4(%esp)
    282 	movl	20(%ebp),%eax
    283 	movl	%eax,8(%esp)
    284 	movl	24(%ebp),%eax
    285 	movl	%eax,12(%esp)
    286 	movl	28(%ebp),%eax
    287 	movl	%eax,16(%esp)
    288 	movl	32(%ebp),%eax
    289 	movl	%eax,20(%esp)
    290 	movl	36(%ebp),%eax
    291 	movl	%eax,24(%esp)
    292 	call	*8(%ebp)
    293 	movl	%ebp,%esp
    294 	popl	%ebp
    295 	ret
    296 .size	OPENSSL_indirect_call,.-.L_OPENSSL_indirect_call_begin
    297 .globl	OPENSSL_ia32_rdrand
    298 .hidden	OPENSSL_ia32_rdrand
    299 .type	OPENSSL_ia32_rdrand,@function
    300 .align	16
    301 OPENSSL_ia32_rdrand:
    302 .L_OPENSSL_ia32_rdrand_begin:
    303 	movl	$8,%ecx
    304 .L018loop:
    305 .byte	15,199,240
    306 	jc	.L019break
    307 	loop	.L018loop
    308 .L019break:
    309 	cmpl	$0,%eax
    310 	cmovel	%ecx,%eax
    311 	ret
    312 .size	OPENSSL_ia32_rdrand,.-.L_OPENSSL_ia32_rdrand_begin
    313 .hidden	OPENSSL_ia32cap_P
    314 #endif
    315