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