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