1 .text
2 .globl	OPENSSL_ia32_cpuid
3 .type	OPENSSL_ia32_cpuid,@function
4 .align	16
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 .size	OPENSSL_ia32_cpuid,.-.L_OPENSSL_ia32_cpuid_begin
151 .globl	OPENSSL_rdtsc
152 .type	OPENSSL_rdtsc,@function
153 .align	16
154 OPENSSL_rdtsc:
155 .L_OPENSSL_rdtsc_begin:
156 	%ifdef __CET__
157 
158 .byte	243,15,30,251
159 	%endif
160 
161 	xorl	%eax,%eax
162 	xorl	%edx,%edx
163 	call	.L009PIC_me_up
164 .L009PIC_me_up:
165 	popl	%ecx
166 	leal	OPENSSL_ia32cap_P-.L009PIC_me_up(%ecx),%ecx
167 	btl	$4,(%ecx)
168 	jnc	.L010notsc
169 	.byte	0x0f,0x31
170 .L010notsc:
171 	ret
172 .size	OPENSSL_rdtsc,.-.L_OPENSSL_rdtsc_begin
173 .globl	OPENSSL_instrument_halt
174 .type	OPENSSL_instrument_halt,@function
175 .align	16
176 OPENSSL_instrument_halt:
177 .L_OPENSSL_instrument_halt_begin:
178 	%ifdef __CET__
179 
180 .byte	243,15,30,251
181 	%endif
182 
183 	call	.L011PIC_me_up
184 .L011PIC_me_up:
185 	popl	%ecx
186 	leal	OPENSSL_ia32cap_P-.L011PIC_me_up(%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 .size	OPENSSL_instrument_halt,.-.L_OPENSSL_instrument_halt_begin
210 .globl	OPENSSL_far_spin
211 .type	OPENSSL_far_spin,@function
212 .align	16
213 OPENSSL_far_spin:
214 .L_OPENSSL_far_spin_begin:
215 	%ifdef __CET__
216 
217 .byte	243,15,30,251
218 	%endif
219 
220 	pushfl
221 	popl	%eax
222 	btl	$9,%eax
223 	jnc	.L013nospin
224 	movl	4(%esp),%eax
225 	movl	8(%esp),%ecx
226 .long	2430111262
227 	xorl	%eax,%eax
228 	movl	(%ecx),%edx
229 	jmp	.L014spin
230 .align	16
231 .L014spin:
232 	incl	%eax
233 	cmpl	(%ecx),%edx
234 	je	.L014spin
235 .long	529567888
236 	ret
237 .L013nospin:
238 	xorl	%eax,%eax
239 	xorl	%edx,%edx
240 	ret
241 .size	OPENSSL_far_spin,.-.L_OPENSSL_far_spin_begin
242 .globl	OPENSSL_wipe_cpu
243 .type	OPENSSL_wipe_cpu,@function
244 .align	16
245 OPENSSL_wipe_cpu:
246 .L_OPENSSL_wipe_cpu_begin:
247 	%ifdef __CET__
248 
249 .byte	243,15,30,251
250 	%endif
251 
252 	xorl	%eax,%eax
253 	xorl	%edx,%edx
254 	call	.L015PIC_me_up
255 .L015PIC_me_up:
256 	popl	%ecx
257 	leal	OPENSSL_ia32cap_P-.L015PIC_me_up(%ecx),%ecx
258 	movl	(%ecx),%ecx
259 	btl	$1,(%ecx)
260 	jnc	.L016no_x87
261 	andl	$83886080,%ecx
262 	cmpl	$83886080,%ecx
263 	jne	.L017no_sse2
264 	pxor	%xmm0,%xmm0
265 	pxor	%xmm1,%xmm1
266 	pxor	%xmm2,%xmm2
267 	pxor	%xmm3,%xmm3
268 	pxor	%xmm4,%xmm4
269 	pxor	%xmm5,%xmm5
270 	pxor	%xmm6,%xmm6
271 	pxor	%xmm7,%xmm7
272 .L017no_sse2:
273 .long	4007259865,4007259865,4007259865,4007259865,2430851995
274 .L016no_x87:
275 	leal	4(%esp),%eax
276 	ret
277 .size	OPENSSL_wipe_cpu,.-.L_OPENSSL_wipe_cpu_begin
278 .globl	OPENSSL_atomic_add
279 .type	OPENSSL_atomic_add,@function
280 .align	16
281 OPENSSL_atomic_add:
282 .L_OPENSSL_atomic_add_begin:
283 	%ifdef __CET__
284 
285 .byte	243,15,30,251
286 	%endif
287 
288 	movl	4(%esp),%edx
289 	movl	8(%esp),%ecx
290 	pushl	%ebx
291 	nop
292 	movl	(%edx),%eax
293 .L018spin:
294 	leal	(%eax,%ecx,1),%ebx
295 	nop
296 .long	447811568
297 	jne	.L018spin
298 	movl	%ebx,%eax
299 	popl	%ebx
300 	ret
301 .size	OPENSSL_atomic_add,.-.L_OPENSSL_atomic_add_begin
302 .globl	OPENSSL_cleanse
303 .type	OPENSSL_cleanse,@function
304 .align	16
305 OPENSSL_cleanse:
306 .L_OPENSSL_cleanse_begin:
307 	%ifdef __CET__
308 
309 .byte	243,15,30,251
310 	%endif
311 
312 	movl	4(%esp),%edx
313 	movl	8(%esp),%ecx
314 	xorl	%eax,%eax
315 	cmpl	$7,%ecx
316 	jae	.L019lot
317 	cmpl	$0,%ecx
318 	je	.L020ret
319 .L021little:
320 	movb	%al,(%edx)
321 	subl	$1,%ecx
322 	leal	1(%edx),%edx
323 	jnz	.L021little
324 .L020ret:
325 	ret
326 .align	16
327 .L019lot:
328 	testl	$3,%edx
329 	jz	.L022aligned
330 	movb	%al,(%edx)
331 	leal	-1(%ecx),%ecx
332 	leal	1(%edx),%edx
333 	jmp	.L019lot
334 .L022aligned:
335 	movl	%eax,(%edx)
336 	leal	-4(%ecx),%ecx
337 	testl	$-4,%ecx
338 	leal	4(%edx),%edx
339 	jnz	.L022aligned
340 	cmpl	$0,%ecx
341 	jne	.L021little
342 	ret
343 .size	OPENSSL_cleanse,.-.L_OPENSSL_cleanse_begin
344 .globl	CRYPTO_memcmp
345 .type	CRYPTO_memcmp,@function
346 .align	16
347 CRYPTO_memcmp:
348 .L_CRYPTO_memcmp_begin:
349 	%ifdef __CET__
350 
351 .byte	243,15,30,251
352 	%endif
353 
354 	pushl	%esi
355 	pushl	%edi
356 	movl	12(%esp),%esi
357 	movl	16(%esp),%edi
358 	movl	20(%esp),%ecx
359 	xorl	%eax,%eax
360 	xorl	%edx,%edx
361 	cmpl	$0,%ecx
362 	je	.L023no_data
363 .L024loop:
364 	movb	(%esi),%dl
365 	leal	1(%esi),%esi
366 	xorb	(%edi),%dl
367 	leal	1(%edi),%edi
368 	orb	%dl,%al
369 	decl	%ecx
370 	jnz	.L024loop
371 	negl	%eax
372 	shrl	$31,%eax
373 .L023no_data:
374 	popl	%edi
375 	popl	%esi
376 	ret
377 .size	CRYPTO_memcmp,.-.L_CRYPTO_memcmp_begin
378 .globl	OPENSSL_instrument_bus
379 .type	OPENSSL_instrument_bus,@function
380 .align	16
381 OPENSSL_instrument_bus:
382 .L_OPENSSL_instrument_bus_begin:
383 	%ifdef __CET__
384 
385 .byte	243,15,30,251
386 	%endif
387 
388 	pushl	%ebp
389 	pushl	%ebx
390 	pushl	%esi
391 	pushl	%edi
392 	movl	$0,%eax
393 	call	.L025PIC_me_up
394 .L025PIC_me_up:
395 	popl	%edx
396 	leal	OPENSSL_ia32cap_P-.L025PIC_me_up(%edx),%edx
397 	btl	$4,(%edx)
398 	jnc	.L026nogo
399 	btl	$19,(%edx)
400 	jnc	.L026nogo
401 	movl	20(%esp),%edi
402 	movl	24(%esp),%ecx
403 	.byte	0x0f,0x31
404 	movl	%eax,%esi
405 	movl	$0,%ebx
406 	clflush	(%edi)
407 .byte	240
408 	addl	%ebx,(%edi)
409 	jmp	.L027loop
410 .align	16
411 .L027loop:
412 	.byte	0x0f,0x31
413 	movl	%eax,%edx
414 	subl	%esi,%eax
415 	movl	%edx,%esi
416 	movl	%eax,%ebx
417 	clflush	(%edi)
418 .byte	240
419 	addl	%eax,(%edi)
420 	leal	4(%edi),%edi
421 	subl	$1,%ecx
422 	jnz	.L027loop
423 	movl	24(%esp),%eax
424 .L026nogo:
425 	popl	%edi
426 	popl	%esi
427 	popl	%ebx
428 	popl	%ebp
429 	ret
430 .size	OPENSSL_instrument_bus,.-.L_OPENSSL_instrument_bus_begin
431 .globl	OPENSSL_instrument_bus2
432 .type	OPENSSL_instrument_bus2,@function
433 .align	16
434 OPENSSL_instrument_bus2:
435 .L_OPENSSL_instrument_bus2_begin:
436 	%ifdef __CET__
437 
438 .byte	243,15,30,251
439 	%endif
440 
441 	pushl	%ebp
442 	pushl	%ebx
443 	pushl	%esi
444 	pushl	%edi
445 	movl	$0,%eax
446 	call	.L028PIC_me_up
447 .L028PIC_me_up:
448 	popl	%edx
449 	leal	OPENSSL_ia32cap_P-.L028PIC_me_up(%edx),%edx
450 	btl	$4,(%edx)
451 	jnc	.L029nogo
452 	btl	$19,(%edx)
453 	jnc	.L029nogo
454 	movl	20(%esp),%edi
455 	movl	24(%esp),%ecx
456 	movl	28(%esp),%ebp
457 	.byte	0x0f,0x31
458 	movl	%eax,%esi
459 	movl	$0,%ebx
460 	clflush	(%edi)
461 .byte	240
462 	addl	%ebx,(%edi)
463 	.byte	0x0f,0x31
464 	movl	%eax,%edx
465 	subl	%esi,%eax
466 	movl	%edx,%esi
467 	movl	%eax,%ebx
468 	jmp	.L030loop2
469 .align	16
470 .L030loop2:
471 	clflush	(%edi)
472 .byte	240
473 	addl	%eax,(%edi)
474 	subl	$1,%ebp
475 	jz	.L031done2
476 	.byte	0x0f,0x31
477 	movl	%eax,%edx
478 	subl	%esi,%eax
479 	movl	%edx,%esi
480 	cmpl	%ebx,%eax
481 	movl	%eax,%ebx
482 	movl	$0,%edx
483 	setne	%dl
484 	subl	%edx,%ecx
485 	leal	(%edi,%edx,4),%edi
486 	jnz	.L030loop2
487 .L031done2:
488 	movl	24(%esp),%eax
489 	subl	%ecx,%eax
490 .L029nogo:
491 	popl	%edi
492 	popl	%esi
493 	popl	%ebx
494 	popl	%ebp
495 	ret
496 .size	OPENSSL_instrument_bus2,.-.L_OPENSSL_instrument_bus2_begin
497 .globl	OPENSSL_ia32_rdrand_bytes
498 .type	OPENSSL_ia32_rdrand_bytes,@function
499 .align	16
500 OPENSSL_ia32_rdrand_bytes:
501 .L_OPENSSL_ia32_rdrand_bytes_begin:
502 	%ifdef __CET__
503 
504 .byte	243,15,30,251
505 	%endif
506 
507 	pushl	%edi
508 	pushl	%ebx
509 	xorl	%eax,%eax
510 	movl	12(%esp),%edi
511 	movl	16(%esp),%ebx
512 	cmpl	$0,%ebx
513 	je	.L032done
514 	movl	$8,%ecx
515 .L033loop:
516 .byte	15,199,242
517 	jc	.L034break
518 	loop	.L033loop
519 	jmp	.L032done
520 .align	16
521 .L034break:
522 	cmpl	$4,%ebx
523 	jb	.L035tail
524 	movl	%edx,(%edi)
525 	leal	4(%edi),%edi
526 	addl	$4,%eax
527 	subl	$4,%ebx
528 	jz	.L032done
529 	movl	$8,%ecx
530 	jmp	.L033loop
531 .align	16
532 .L035tail:
533 	movb	%dl,(%edi)
534 	leal	1(%edi),%edi
535 	incl	%eax
536 	shrl	$8,%edx
537 	decl	%ebx
538 	jnz	.L035tail
539 .L032done:
540 	xorl	%edx,%edx
541 	popl	%ebx
542 	popl	%edi
543 	ret
544 .size	OPENSSL_ia32_rdrand_bytes,.-.L_OPENSSL_ia32_rdrand_bytes_begin
545 .globl	OPENSSL_ia32_rdseed_bytes
546 .type	OPENSSL_ia32_rdseed_bytes,@function
547 .align	16
548 OPENSSL_ia32_rdseed_bytes:
549 .L_OPENSSL_ia32_rdseed_bytes_begin:
550 	%ifdef __CET__
551 
552 .byte	243,15,30,251
553 	%endif
554 
555 	pushl	%edi
556 	pushl	%ebx
557 	xorl	%eax,%eax
558 	movl	12(%esp),%edi
559 	movl	16(%esp),%ebx
560 	cmpl	$0,%ebx
561 	je	.L036done
562 	movl	$8,%ecx
563 .L037loop:
564 .byte	15,199,250
565 	jc	.L038break
566 	loop	.L037loop
567 	jmp	.L036done
568 .align	16
569 .L038break:
570 	cmpl	$4,%ebx
571 	jb	.L039tail
572 	movl	%edx,(%edi)
573 	leal	4(%edi),%edi
574 	addl	$4,%eax
575 	subl	$4,%ebx
576 	jz	.L036done
577 	movl	$8,%ecx
578 	jmp	.L037loop
579 .align	16
580 .L039tail:
581 	movb	%dl,(%edi)
582 	leal	1(%edi),%edi
583 	incl	%eax
584 	shrl	$8,%edx
585 	decl	%ebx
586 	jnz	.L039tail
587 .L036done:
588 	xorl	%edx,%edx
589 	popl	%ebx
590 	popl	%edi
591 	ret
592 .size	OPENSSL_ia32_rdseed_bytes,.-.L_OPENSSL_ia32_rdseed_bytes_begin
593 .hidden	OPENSSL_cpuid_setup
594 .hidden	OPENSSL_ia32cap_P
595 .comm	OPENSSL_ia32cap_P,16,4
596 .section	.init
597 	call	OPENSSL_cpuid_setup
598 
599 	.section ".note.gnu.property", "a"
600 	.p2align 2
601 	.long 1f - 0f
602 	.long 4f - 1f
603 	.long 5
604 0:
605 	.asciz "GNU"
606 1:
607 	.p2align 2
608 	.long 0xc0000002
609 	.long 3f - 2f
610 2:
611 	.long 3
612 3:
613 	.p2align 2
614 4:
615