1 .text
2 .globl	_OPENSSL_ia32_cpuid
3 .type	_OPENSSL_ia32_cpuid,@function
4 .align	4
5 _OPENSSL_ia32_cpuid:
6 L_OPENSSL_ia32_cpuid_begin:
7 	%ifdef __CET__
8 
9 .byte	243,15,30,251
10 	%endif
11 
12 	pushl	%ebp
13 	pushl	%ebx
14 	pushl	%esi
15 	pushl	%edi
16 	xorl	%edx,%edx
17 	pushfl
18 	popl	%eax
19 	movl	%eax,%ecx
20 	xorl	$2097152,%eax
21 	pushl	%eax
22 	popfl
23 	pushfl
24 	popl	%eax
25 	xorl	%eax,%ecx
26 	xorl	%eax,%eax
27 	movl	20(%esp),%esi
28 	movl	%eax,8(%esi)
29 	btl	$21,%ecx
30 	jnc	L000nocpuid
31 	.byte	0x0f,0xa2
32 	movl	%eax,%edi
33 	xorl	%eax,%eax
34 	cmpl	$1970169159,%ebx
35 	setne	%al
36 	movl	%eax,%ebp
37 	cmpl	$1231384169,%edx
38 	setne	%al
39 	orl	%eax,%ebp
40 	cmpl	$1818588270,%ecx
41 	setne	%al
42 	orl	%eax,%ebp
43 	jz	L001intel
44 	cmpl	$1752462657,%ebx
45 	setne	%al
46 	movl	%eax,%esi
47 	cmpl	$1769238117,%edx
48 	setne	%al
49 	orl	%eax,%esi
50 	cmpl	$1145913699,%ecx
51 	setne	%al
52 	orl	%eax,%esi
53 	jnz	L001intel
54 	movl	$2147483648,%eax
55 	.byte	0x0f,0xa2
56 	cmpl	$2147483649,%eax
57 	jb	L001intel
58 	movl	%eax,%esi
59 	movl	$2147483649,%eax
60 	.byte	0x0f,0xa2
61 	orl	%ecx,%ebp
62 	andl	$2049,%ebp
63 	cmpl	$2147483656,%esi
64 	jb	L001intel
65 	movl	$2147483656,%eax
66 	.byte	0x0f,0xa2
67 	movzbl	%cl,%esi
68 	incl	%esi
69 	movl	$1,%eax
70 	xorl	%ecx,%ecx
71 	.byte	0x0f,0xa2
72 	btl	$28,%edx
73 	jnc	L002generic
74 	shrl	$16,%ebx
75 	andl	$255,%ebx
76 	cmpl	%esi,%ebx
77 	ja	L002generic
78 	andl	$4026531839,%edx
79 	jmp	L002generic
80 L001intel:
81 	cmpl	$4,%edi
82 	movl	$-1,%esi
83 	jb	L003nocacheinfo
84 	movl	$4,%eax
85 	movl	$0,%ecx
86 	.byte	0x0f,0xa2
87 	movl	%eax,%esi
88 	shrl	$14,%esi
89 	andl	$4095,%esi
90 L003nocacheinfo:
91 	movl	$1,%eax
92 	xorl	%ecx,%ecx
93 	.byte	0x0f,0xa2
94 	andl	$3220176895,%edx
95 	cmpl	$0,%ebp
96 	jne	L004notintel
97 	orl	$1073741824,%edx
98 	andb	$15,%ah
99 	cmpb	$15,%ah
100 	jne	L004notintel
101 	orl	$1048576,%edx
102 L004notintel:
103 	btl	$28,%edx
104 	jnc	L002generic
105 	andl	$4026531839,%edx
106 	cmpl	$0,%esi
107 	je	L002generic
108 	orl	$268435456,%edx
109 	shrl	$16,%ebx
110 	cmpb	$1,%bl
111 	ja	L002generic
112 	andl	$4026531839,%edx
113 L002generic:
114 	andl	$2048,%ebp
115 	andl	$4294965247,%ecx
116 	movl	%edx,%esi
117 	orl	%ecx,%ebp
118 	cmpl	$7,%edi
119 	movl	20(%esp),%edi
120 	jb	L005no_extended_info
121 	movl	$7,%eax
122 	xorl	%ecx,%ecx
123 	.byte	0x0f,0xa2
124 	movl	%ebx,8(%edi)
125 L005no_extended_info:
126 	btl	$27,%ebp
127 	jnc	L006clear_avx
128 	xorl	%ecx,%ecx
129 .byte	15,1,208
130 	andl	$6,%eax
131 	cmpl	$6,%eax
132 	je	L007done
133 	cmpl	$2,%eax
134 	je	L006clear_avx
135 L008clear_xmm:
136 	andl	$4261412861,%ebp
137 	andl	$4278190079,%esi
138 L006clear_avx:
139 	andl	$4026525695,%ebp
140 	andl	$4294967263,8(%edi)
141 L007done:
142 	movl	%esi,%eax
143 	movl	%ebp,%edx
144 L000nocpuid:
145 	popl	%edi
146 	popl	%esi
147 	popl	%ebx
148 	popl	%ebp
149 	ret
150 .globl	_OPENSSL_rdtsc
151 .type	_OPENSSL_rdtsc,@function
152 .align	4
153 _OPENSSL_rdtsc:
154 L_OPENSSL_rdtsc_begin:
155 	%ifdef __CET__
156 
157 .byte	243,15,30,251
158 	%endif
159 
160 	xorl	%eax,%eax
161 	xorl	%edx,%edx
162 	call	L009PIC_me_up
163 L009PIC_me_up:
164 	popl	%ecx
165 	leal	__GLOBAL_OFFSET_TABLE_+[.-L009PIC_me_up](%ecx),%ecx
166 	movl	_OPENSSL_ia32cap_P@GOT(%ecx),%ecx
167 	btl	$4,(%ecx)
168 	jnc	L010notsc
169 	.byte	0x0f,0x31
170 L010notsc:
171 	ret
172 .globl	_OPENSSL_instrument_halt
173 .type	_OPENSSL_instrument_halt,@function
174 .align	4
175 _OPENSSL_instrument_halt:
176 L_OPENSSL_instrument_halt_begin:
177 	%ifdef __CET__
178 
179 .byte	243,15,30,251
180 	%endif
181 
182 	call	L011PIC_me_up
183 L011PIC_me_up:
184 	popl	%ecx
185 	leal	__GLOBAL_OFFSET_TABLE_+[.-L011PIC_me_up](%ecx),%ecx
186 	movl	_OPENSSL_ia32cap_P@GOT(%ecx),%ecx
187 	btl	$4,(%ecx)
188 	jnc	L012nohalt
189 .long	2421723150
190 	andl	$3,%eax
191 	jnz	L012nohalt
192 	pushfl
193 	popl	%eax
194 	btl	$9,%eax
195 	jnc	L012nohalt
196 	.byte	0x0f,0x31
197 	pushl	%edx
198 	pushl	%eax
199 	hlt
200 	.byte	0x0f,0x31
201 	subl	(%esp),%eax
202 	sbbl	4(%esp),%edx
203 	addl	$8,%esp
204 	ret
205 L012nohalt:
206 	xorl	%eax,%eax
207 	xorl	%edx,%edx
208 	ret
209 .globl	_OPENSSL_far_spin
210 .type	_OPENSSL_far_spin,@function
211 .align	4
212 _OPENSSL_far_spin:
213 L_OPENSSL_far_spin_begin:
214 	%ifdef __CET__
215 
216 .byte	243,15,30,251
217 	%endif
218 
219 	pushfl
220 	popl	%eax
221 	btl	$9,%eax
222 	jnc	L013nospin
223 	movl	4(%esp),%eax
224 	movl	8(%esp),%ecx
225 .long	2430111262
226 	xorl	%eax,%eax
227 	movl	(%ecx),%edx
228 	jmp	L014spin
229 .align	4,0x90
230 L014spin:
231 	incl	%eax
232 	cmpl	(%ecx),%edx
233 	je	L014spin
234 .long	529567888
235 	ret
236 L013nospin:
237 	xorl	%eax,%eax
238 	xorl	%edx,%edx
239 	ret
240 .globl	_OPENSSL_wipe_cpu
241 .type	_OPENSSL_wipe_cpu,@function
242 .align	4
243 _OPENSSL_wipe_cpu:
244 L_OPENSSL_wipe_cpu_begin:
245 	%ifdef __CET__
246 
247 .byte	243,15,30,251
248 	%endif
249 
250 	xorl	%eax,%eax
251 	xorl	%edx,%edx
252 	call	L015PIC_me_up
253 L015PIC_me_up:
254 	popl	%ecx
255 	leal	__GLOBAL_OFFSET_TABLE_+[.-L015PIC_me_up](%ecx),%ecx
256 	movl	_OPENSSL_ia32cap_P@GOT(%ecx),%ecx
257 	movl	(%ecx),%ecx
258 	btl	$1,(%ecx)
259 	jnc	L016no_x87
260 	andl	$83886080,%ecx
261 	cmpl	$83886080,%ecx
262 	jne	L017no_sse2
263 	pxor	%xmm0,%xmm0
264 	pxor	%xmm1,%xmm1
265 	pxor	%xmm2,%xmm2
266 	pxor	%xmm3,%xmm3
267 	pxor	%xmm4,%xmm4
268 	pxor	%xmm5,%xmm5
269 	pxor	%xmm6,%xmm6
270 	pxor	%xmm7,%xmm7
271 L017no_sse2:
272 .long	4007259865,4007259865,4007259865,4007259865,2430851995
273 L016no_x87:
274 	leal	4(%esp),%eax
275 	ret
276 .globl	_OPENSSL_atomic_add
277 .type	_OPENSSL_atomic_add,@function
278 .align	4
279 _OPENSSL_atomic_add:
280 L_OPENSSL_atomic_add_begin:
281 	%ifdef __CET__
282 
283 .byte	243,15,30,251
284 	%endif
285 
286 	movl	4(%esp),%edx
287 	movl	8(%esp),%ecx
288 	pushl	%ebx
289 	nop
290 	movl	(%edx),%eax
291 L018spin:
292 	leal	(%eax,%ecx,1),%ebx
293 	nop
294 .long	447811568
295 	jne	L018spin
296 	movl	%ebx,%eax
297 	popl	%ebx
298 	ret
299 .globl	_OPENSSL_cleanse
300 .type	_OPENSSL_cleanse,@function
301 .align	4
302 _OPENSSL_cleanse:
303 L_OPENSSL_cleanse_begin:
304 	%ifdef __CET__
305 
306 .byte	243,15,30,251
307 	%endif
308 
309 	movl	4(%esp),%edx
310 	movl	8(%esp),%ecx
311 	xorl	%eax,%eax
312 	cmpl	$7,%ecx
313 	jae	L019lot
314 	cmpl	$0,%ecx
315 	je	L020ret
316 L021little:
317 	movb	%al,(%edx)
318 	subl	$1,%ecx
319 	leal	1(%edx),%edx
320 	jnz	L021little
321 L020ret:
322 	ret
323 .align	4,0x90
324 L019lot:
325 	testl	$3,%edx
326 	jz	L022aligned
327 	movb	%al,(%edx)
328 	leal	-1(%ecx),%ecx
329 	leal	1(%edx),%edx
330 	jmp	L019lot
331 L022aligned:
332 	movl	%eax,(%edx)
333 	leal	-4(%ecx),%ecx
334 	testl	$-4,%ecx
335 	leal	4(%edx),%edx
336 	jnz	L022aligned
337 	cmpl	$0,%ecx
338 	jne	L021little
339 	ret
340 .globl	_CRYPTO_memcmp
341 .type	_CRYPTO_memcmp,@function
342 .align	4
343 _CRYPTO_memcmp:
344 L_CRYPTO_memcmp_begin:
345 	%ifdef __CET__
346 
347 .byte	243,15,30,251
348 	%endif
349 
350 	pushl	%esi
351 	pushl	%edi
352 	movl	12(%esp),%esi
353 	movl	16(%esp),%edi
354 	movl	20(%esp),%ecx
355 	xorl	%eax,%eax
356 	xorl	%edx,%edx
357 	cmpl	$0,%ecx
358 	je	L023no_data
359 L024loop:
360 	movb	(%esi),%dl
361 	leal	1(%esi),%esi
362 	xorb	(%edi),%dl
363 	leal	1(%edi),%edi
364 	orb	%dl,%al
365 	decl	%ecx
366 	jnz	L024loop
367 	negl	%eax
368 	shrl	$31,%eax
369 L023no_data:
370 	popl	%edi
371 	popl	%esi
372 	ret
373 .globl	_OPENSSL_instrument_bus
374 .type	_OPENSSL_instrument_bus,@function
375 .align	4
376 _OPENSSL_instrument_bus:
377 L_OPENSSL_instrument_bus_begin:
378 	%ifdef __CET__
379 
380 .byte	243,15,30,251
381 	%endif
382 
383 	pushl	%ebp
384 	pushl	%ebx
385 	pushl	%esi
386 	pushl	%edi
387 	movl	$0,%eax
388 	call	L025PIC_me_up
389 L025PIC_me_up:
390 	popl	%edx
391 	leal	__GLOBAL_OFFSET_TABLE_+[.-L025PIC_me_up](%edx),%edx
392 	movl	_OPENSSL_ia32cap_P@GOT(%edx),%edx
393 	btl	$4,(%edx)
394 	jnc	L026nogo
395 	btl	$19,(%edx)
396 	jnc	L026nogo
397 	movl	20(%esp),%edi
398 	movl	24(%esp),%ecx
399 	.byte	0x0f,0x31
400 	movl	%eax,%esi
401 	movl	$0,%ebx
402 	clflush	(%edi)
403 .byte	240
404 	addl	%ebx,(%edi)
405 	jmp	L027loop
406 .align	4,0x90
407 L027loop:
408 	.byte	0x0f,0x31
409 	movl	%eax,%edx
410 	subl	%esi,%eax
411 	movl	%edx,%esi
412 	movl	%eax,%ebx
413 	clflush	(%edi)
414 .byte	240
415 	addl	%eax,(%edi)
416 	leal	4(%edi),%edi
417 	subl	$1,%ecx
418 	jnz	L027loop
419 	movl	24(%esp),%eax
420 L026nogo:
421 	popl	%edi
422 	popl	%esi
423 	popl	%ebx
424 	popl	%ebp
425 	ret
426 .globl	_OPENSSL_instrument_bus2
427 .type	_OPENSSL_instrument_bus2,@function
428 .align	4
429 _OPENSSL_instrument_bus2:
430 L_OPENSSL_instrument_bus2_begin:
431 	%ifdef __CET__
432 
433 .byte	243,15,30,251
434 	%endif
435 
436 	pushl	%ebp
437 	pushl	%ebx
438 	pushl	%esi
439 	pushl	%edi
440 	movl	$0,%eax
441 	call	L028PIC_me_up
442 L028PIC_me_up:
443 	popl	%edx
444 	leal	__GLOBAL_OFFSET_TABLE_+[.-L028PIC_me_up](%edx),%edx
445 	movl	_OPENSSL_ia32cap_P@GOT(%edx),%edx
446 	btl	$4,(%edx)
447 	jnc	L029nogo
448 	btl	$19,(%edx)
449 	jnc	L029nogo
450 	movl	20(%esp),%edi
451 	movl	24(%esp),%ecx
452 	movl	28(%esp),%ebp
453 	.byte	0x0f,0x31
454 	movl	%eax,%esi
455 	movl	$0,%ebx
456 	clflush	(%edi)
457 .byte	240
458 	addl	%ebx,(%edi)
459 	.byte	0x0f,0x31
460 	movl	%eax,%edx
461 	subl	%esi,%eax
462 	movl	%edx,%esi
463 	movl	%eax,%ebx
464 	jmp	L030loop2
465 .align	4,0x90
466 L030loop2:
467 	clflush	(%edi)
468 .byte	240
469 	addl	%eax,(%edi)
470 	subl	$1,%ebp
471 	jz	L031done2
472 	.byte	0x0f,0x31
473 	movl	%eax,%edx
474 	subl	%esi,%eax
475 	movl	%edx,%esi
476 	cmpl	%ebx,%eax
477 	movl	%eax,%ebx
478 	movl	$0,%edx
479 	setne	%dl
480 	subl	%edx,%ecx
481 	leal	(%edi,%edx,4),%edi
482 	jnz	L030loop2
483 L031done2:
484 	movl	24(%esp),%eax
485 	subl	%ecx,%eax
486 L029nogo:
487 	popl	%edi
488 	popl	%esi
489 	popl	%ebx
490 	popl	%ebp
491 	ret
492 .globl	_OPENSSL_ia32_rdrand_bytes
493 .type	_OPENSSL_ia32_rdrand_bytes,@function
494 .align	4
495 _OPENSSL_ia32_rdrand_bytes:
496 L_OPENSSL_ia32_rdrand_bytes_begin:
497 	%ifdef __CET__
498 
499 .byte	243,15,30,251
500 	%endif
501 
502 	pushl	%edi
503 	pushl	%ebx
504 	xorl	%eax,%eax
505 	movl	12(%esp),%edi
506 	movl	16(%esp),%ebx
507 	cmpl	$0,%ebx
508 	je	L032done
509 	movl	$8,%ecx
510 L033loop:
511 .byte	15,199,242
512 	jc	L034break
513 	loop	L033loop
514 	jmp	L032done
515 .align	4,0x90
516 L034break:
517 	cmpl	$4,%ebx
518 	jb	L035tail
519 	movl	%edx,(%edi)
520 	leal	4(%edi),%edi
521 	addl	$4,%eax
522 	subl	$4,%ebx
523 	jz	L032done
524 	movl	$8,%ecx
525 	jmp	L033loop
526 .align	4,0x90
527 L035tail:
528 	movb	%dl,(%edi)
529 	leal	1(%edi),%edi
530 	incl	%eax
531 	shrl	$8,%edx
532 	decl	%ebx
533 	jnz	L035tail
534 L032done:
535 	xorl	%edx,%edx
536 	popl	%ebx
537 	popl	%edi
538 	ret
539 .globl	_OPENSSL_ia32_rdseed_bytes
540 .type	_OPENSSL_ia32_rdseed_bytes,@function
541 .align	4
542 _OPENSSL_ia32_rdseed_bytes:
543 L_OPENSSL_ia32_rdseed_bytes_begin:
544 	%ifdef __CET__
545 
546 .byte	243,15,30,251
547 	%endif
548 
549 	pushl	%edi
550 	pushl	%ebx
551 	xorl	%eax,%eax
552 	movl	12(%esp),%edi
553 	movl	16(%esp),%ebx
554 	cmpl	$0,%ebx
555 	je	L036done
556 	movl	$8,%ecx
557 L037loop:
558 .byte	15,199,250
559 	jc	L038break
560 	loop	L037loop
561 	jmp	L036done
562 .align	4,0x90
563 L038break:
564 	cmpl	$4,%ebx
565 	jb	L039tail
566 	movl	%edx,(%edi)
567 	leal	4(%edi),%edi
568 	addl	$4,%eax
569 	subl	$4,%ebx
570 	jz	L036done
571 	movl	$8,%ecx
572 	jmp	L037loop
573 .align	4,0x90
574 L039tail:
575 	movb	%dl,(%edi)
576 	leal	1(%edi),%edi
577 	incl	%eax
578 	shrl	$8,%edx
579 	decl	%ebx
580 	jnz	L039tail
581 L036done:
582 	xorl	%edx,%edx
583 	popl	%ebx
584 	popl	%edi
585 	ret
586 .comm	_OPENSSL_ia32cap_P,16
587 .text
588 .type	__GLOBAL_$I$_OPENSSL_cpuid_setup,@function
589 .globl	__GLOBAL_$I$_OPENSSL_cpuid_setup
590 .align	2
591 __GLOBAL_$I$_OPENSSL_cpuid_setup:
592 	jmp	_OPENSSL_cpuid_setup
593