1 /* $FreeBSD$ */
2 /* Do not modify. This file is auto-generated from x86cpuid.pl. */
3 #ifdef PIC
4 .text
5 .globl 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 movl 20(%esp),%esi
26 movl %eax,8(%esi)
27 btl $21,%ecx
28 jnc .L000nocpuid
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 $4,%edi
80 movl $-1,%esi
81 jb .L003nocacheinfo
82 movl $4,%eax
83 movl $0,%ecx
84 .byte 0x0f,0xa2
85 movl %eax,%esi
86 shrl $14,%esi
87 andl $4095,%esi
88 .L003nocacheinfo:
89 movl $1,%eax
90 xorl %ecx,%ecx
91 .byte 0x0f,0xa2
92 andl $3220176895,%edx
93 cmpl $0,%ebp
94 jne .L004notintel
95 orl $1073741824,%edx
96 andb $15,%ah
97 cmpb $15,%ah
98 jne .L004notintel
99 orl $1048576,%edx
100 .L004notintel:
101 btl $28,%edx
102 jnc .L002generic
103 andl $4026531839,%edx
104 cmpl $0,%esi
105 je .L002generic
106 orl $268435456,%edx
107 shrl $16,%ebx
108 cmpb $1,%bl
109 ja .L002generic
110 andl $4026531839,%edx
111 .L002generic:
112 andl $2048,%ebp
113 andl $4294965247,%ecx
114 movl %edx,%esi
115 orl %ecx,%ebp
116 cmpl $7,%edi
117 movl 20(%esp),%edi
118 jb .L005no_extended_info
119 movl $7,%eax
120 xorl %ecx,%ecx
121 .byte 0x0f,0xa2
122 movl %ebx,8(%edi)
123 .L005no_extended_info:
124 btl $27,%ebp
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 andl $4294967263,8(%edi)
139 .L007done:
140 movl %esi,%eax
141 movl %ebp,%edx
142 .L000nocpuid:
143 popl %edi
144 popl %esi
145 popl %ebx
146 popl %ebp
147 ret
148 .size OPENSSL_ia32_cpuid,.-.L_OPENSSL_ia32_cpuid_begin
149 .globl OPENSSL_rdtsc
150 .type OPENSSL_rdtsc,@function
151 .align 16
152 OPENSSL_rdtsc:
153 .L_OPENSSL_rdtsc_begin:
154 xorl %eax,%eax
155 xorl %edx,%edx
156 call .L009PIC_me_up
157 .L009PIC_me_up:
158 popl %ecx
159 leal OPENSSL_ia32cap_P-.L009PIC_me_up(%ecx),%ecx
160 btl $4,(%ecx)
161 jnc .L010notsc
162 .byte 0x0f,0x31
163 .L010notsc:
164 ret
165 .size OPENSSL_rdtsc,.-.L_OPENSSL_rdtsc_begin
166 .globl OPENSSL_instrument_halt
167 .type OPENSSL_instrument_halt,@function
168 .align 16
169 OPENSSL_instrument_halt:
170 .L_OPENSSL_instrument_halt_begin:
171 call .L011PIC_me_up
172 .L011PIC_me_up:
173 popl %ecx
174 leal OPENSSL_ia32cap_P-.L011PIC_me_up(%ecx),%ecx
175 btl $4,(%ecx)
176 jnc .L012nohalt
177 .long 2421723150
178 andl $3,%eax
179 jnz .L012nohalt
180 pushfl
181 popl %eax
182 btl $9,%eax
183 jnc .L012nohalt
184 .byte 0x0f,0x31
185 pushl %edx
186 pushl %eax
187 hlt
188 .byte 0x0f,0x31
189 subl (%esp),%eax
190 sbbl 4(%esp),%edx
191 addl $8,%esp
192 ret
193 .L012nohalt:
194 xorl %eax,%eax
195 xorl %edx,%edx
196 ret
197 .size OPENSSL_instrument_halt,.-.L_OPENSSL_instrument_halt_begin
198 .globl OPENSSL_far_spin
199 .type OPENSSL_far_spin,@function
200 .align 16
201 OPENSSL_far_spin:
202 .L_OPENSSL_far_spin_begin:
203 pushfl
204 popl %eax
205 btl $9,%eax
206 jnc .L013nospin
207 movl 4(%esp),%eax
208 movl 8(%esp),%ecx
209 .long 2430111262
210 xorl %eax,%eax
211 movl (%ecx),%edx
212 jmp .L014spin
213 .align 16
214 .L014spin:
215 incl %eax
216 cmpl (%ecx),%edx
217 je .L014spin
218 .long 529567888
219 ret
220 .L013nospin:
221 xorl %eax,%eax
222 xorl %edx,%edx
223 ret
224 .size OPENSSL_far_spin,.-.L_OPENSSL_far_spin_begin
225 .globl OPENSSL_wipe_cpu
226 .type OPENSSL_wipe_cpu,@function
227 .align 16
228 OPENSSL_wipe_cpu:
229 .L_OPENSSL_wipe_cpu_begin:
230 xorl %eax,%eax
231 xorl %edx,%edx
232 call .L015PIC_me_up
233 .L015PIC_me_up:
234 popl %ecx
235 leal OPENSSL_ia32cap_P-.L015PIC_me_up(%ecx),%ecx
236 movl (%ecx),%ecx
237 btl $1,(%ecx)
238 jnc .L016no_x87
239 andl $83886080,%ecx
240 cmpl $83886080,%ecx
241 jne .L017no_sse2
242 pxor %xmm0,%xmm0
243 pxor %xmm1,%xmm1
244 pxor %xmm2,%xmm2
245 pxor %xmm3,%xmm3
246 pxor %xmm4,%xmm4
247 pxor %xmm5,%xmm5
248 pxor %xmm6,%xmm6
249 pxor %xmm7,%xmm7
250 .L017no_sse2:
251 .long 4007259865,4007259865,4007259865,4007259865,2430851995
252 .L016no_x87:
253 leal 4(%esp),%eax
254 ret
255 .size OPENSSL_wipe_cpu,.-.L_OPENSSL_wipe_cpu_begin
256 .globl OPENSSL_atomic_add
257 .type OPENSSL_atomic_add,@function
258 .align 16
259 OPENSSL_atomic_add:
260 .L_OPENSSL_atomic_add_begin:
261 movl 4(%esp),%edx
262 movl 8(%esp),%ecx
263 pushl %ebx
264 nop
265 movl (%edx),%eax
266 .L018spin:
267 leal (%eax,%ecx,1),%ebx
268 nop
269 .long 447811568
270 jne .L018spin
271 movl %ebx,%eax
272 popl %ebx
273 ret
274 .size OPENSSL_atomic_add,.-.L_OPENSSL_atomic_add_begin
275 .globl OPENSSL_cleanse
276 .type OPENSSL_cleanse,@function
277 .align 16
278 OPENSSL_cleanse:
279 .L_OPENSSL_cleanse_begin:
280 movl 4(%esp),%edx
281 movl 8(%esp),%ecx
282 xorl %eax,%eax
283 cmpl $7,%ecx
284 jae .L019lot
285 cmpl $0,%ecx
286 je .L020ret
287 .L021little:
288 movb %al,(%edx)
289 subl $1,%ecx
290 leal 1(%edx),%edx
291 jnz .L021little
292 .L020ret:
293 ret
294 .align 16
295 .L019lot:
296 testl $3,%edx
297 jz .L022aligned
298 movb %al,(%edx)
299 leal -1(%ecx),%ecx
300 leal 1(%edx),%edx
301 jmp .L019lot
302 .L022aligned:
303 movl %eax,(%edx)
304 leal -4(%ecx),%ecx
305 testl $-4,%ecx
306 leal 4(%edx),%edx
307 jnz .L022aligned
308 cmpl $0,%ecx
309 jne .L021little
310 ret
311 .size OPENSSL_cleanse,.-.L_OPENSSL_cleanse_begin
312 .globl CRYPTO_memcmp
313 .type CRYPTO_memcmp,@function
314 .align 16
315 CRYPTO_memcmp:
316 .L_CRYPTO_memcmp_begin:
317 pushl %esi
318 pushl %edi
319 movl 12(%esp),%esi
320 movl 16(%esp),%edi
321 movl 20(%esp),%ecx
322 xorl %eax,%eax
323 xorl %edx,%edx
324 cmpl $0,%ecx
325 je .L023no_data
326 .L024loop:
327 movb (%esi),%dl
328 leal 1(%esi),%esi
329 xorb (%edi),%dl
330 leal 1(%edi),%edi
331 orb %dl,%al
332 decl %ecx
333 jnz .L024loop
334 negl %eax
335 shrl $31,%eax
336 .L023no_data:
337 popl %edi
338 popl %esi
339 ret
340 .size CRYPTO_memcmp,.-.L_CRYPTO_memcmp_begin
341 .globl OPENSSL_instrument_bus
342 .type OPENSSL_instrument_bus,@function
343 .align 16
344 OPENSSL_instrument_bus:
345 .L_OPENSSL_instrument_bus_begin:
346 pushl %ebp
347 pushl %ebx
348 pushl %esi
349 pushl %edi
350 movl $0,%eax
351 call .L025PIC_me_up
352 .L025PIC_me_up:
353 popl %edx
354 leal OPENSSL_ia32cap_P-.L025PIC_me_up(%edx),%edx
355 btl $4,(%edx)
356 jnc .L026nogo
357 btl $19,(%edx)
358 jnc .L026nogo
359 movl 20(%esp),%edi
360 movl 24(%esp),%ecx
361 .byte 0x0f,0x31
362 movl %eax,%esi
363 movl $0,%ebx
364 clflush (%edi)
365 .byte 240
366 addl %ebx,(%edi)
367 jmp .L027loop
368 .align 16
369 .L027loop:
370 .byte 0x0f,0x31
371 movl %eax,%edx
372 subl %esi,%eax
373 movl %edx,%esi
374 movl %eax,%ebx
375 clflush (%edi)
376 .byte 240
377 addl %eax,(%edi)
378 leal 4(%edi),%edi
379 subl $1,%ecx
380 jnz .L027loop
381 movl 24(%esp),%eax
382 .L026nogo:
383 popl %edi
384 popl %esi
385 popl %ebx
386 popl %ebp
387 ret
388 .size OPENSSL_instrument_bus,.-.L_OPENSSL_instrument_bus_begin
389 .globl OPENSSL_instrument_bus2
390 .type OPENSSL_instrument_bus2,@function
391 .align 16
392 OPENSSL_instrument_bus2:
393 .L_OPENSSL_instrument_bus2_begin:
394 pushl %ebp
395 pushl %ebx
396 pushl %esi
397 pushl %edi
398 movl $0,%eax
399 call .L028PIC_me_up
400 .L028PIC_me_up:
401 popl %edx
402 leal OPENSSL_ia32cap_P-.L028PIC_me_up(%edx),%edx
403 btl $4,(%edx)
404 jnc .L029nogo
405 btl $19,(%edx)
406 jnc .L029nogo
407 movl 20(%esp),%edi
408 movl 24(%esp),%ecx
409 movl 28(%esp),%ebp
410 .byte 0x0f,0x31
411 movl %eax,%esi
412 movl $0,%ebx
413 clflush (%edi)
414 .byte 240
415 addl %ebx,(%edi)
416 .byte 0x0f,0x31
417 movl %eax,%edx
418 subl %esi,%eax
419 movl %edx,%esi
420 movl %eax,%ebx
421 jmp .L030loop2
422 .align 16
423 .L030loop2:
424 clflush (%edi)
425 .byte 240
426 addl %eax,(%edi)
427 subl $1,%ebp
428 jz .L031done2
429 .byte 0x0f,0x31
430 movl %eax,%edx
431 subl %esi,%eax
432 movl %edx,%esi
433 cmpl %ebx,%eax
434 movl %eax,%ebx
435 movl $0,%edx
436 setne %dl
437 subl %edx,%ecx
438 leal (%edi,%edx,4),%edi
439 jnz .L030loop2
440 .L031done2:
441 movl 24(%esp),%eax
442 subl %ecx,%eax
443 .L029nogo:
444 popl %edi
445 popl %esi
446 popl %ebx
447 popl %ebp
448 ret
449 .size OPENSSL_instrument_bus2,.-.L_OPENSSL_instrument_bus2_begin
450 .globl OPENSSL_ia32_rdrand_bytes
451 .type OPENSSL_ia32_rdrand_bytes,@function
452 .align 16
453 OPENSSL_ia32_rdrand_bytes:
454 .L_OPENSSL_ia32_rdrand_bytes_begin:
455 pushl %edi
456 pushl %ebx
457 xorl %eax,%eax
458 movl 12(%esp),%edi
459 movl 16(%esp),%ebx
460 cmpl $0,%ebx
461 je .L032done
462 movl $8,%ecx
463 .L033loop:
464 .byte 15,199,242
465 jc .L034break
466 loop .L033loop
467 jmp .L032done
468 .align 16
469 .L034break:
470 cmpl $4,%ebx
471 jb .L035tail
472 movl %edx,(%edi)
473 leal 4(%edi),%edi
474 addl $4,%eax
475 subl $4,%ebx
476 jz .L032done
477 movl $8,%ecx
478 jmp .L033loop
479 .align 16
480 .L035tail:
481 movb %dl,(%edi)
482 leal 1(%edi),%edi
483 incl %eax
484 shrl $8,%edx
485 decl %ebx
486 jnz .L035tail
487 .L032done:
488 xorl %edx,%edx
489 popl %ebx
490 popl %edi
491 ret
492 .size OPENSSL_ia32_rdrand_bytes,.-.L_OPENSSL_ia32_rdrand_bytes_begin
493 .globl OPENSSL_ia32_rdseed_bytes
494 .type OPENSSL_ia32_rdseed_bytes,@function
495 .align 16
496 OPENSSL_ia32_rdseed_bytes:
497 .L_OPENSSL_ia32_rdseed_bytes_begin:
498 pushl %edi
499 pushl %ebx
500 xorl %eax,%eax
501 movl 12(%esp),%edi
502 movl 16(%esp),%ebx
503 cmpl $0,%ebx
504 je .L036done
505 movl $8,%ecx
506 .L037loop:
507 .byte 15,199,250
508 jc .L038break
509 loop .L037loop
510 jmp .L036done
511 .align 16
512 .L038break:
513 cmpl $4,%ebx
514 jb .L039tail
515 movl %edx,(%edi)
516 leal 4(%edi),%edi
517 addl $4,%eax
518 subl $4,%ebx
519 jz .L036done
520 movl $8,%ecx
521 jmp .L037loop
522 .align 16
523 .L039tail:
524 movb %dl,(%edi)
525 leal 1(%edi),%edi
526 incl %eax
527 shrl $8,%edx
528 decl %ebx
529 jnz .L039tail
530 .L036done:
531 xorl %edx,%edx
532 popl %ebx
533 popl %edi
534 ret
535 .size OPENSSL_ia32_rdseed_bytes,.-.L_OPENSSL_ia32_rdseed_bytes_begin
536 .hidden OPENSSL_cpuid_setup
537 .hidden OPENSSL_ia32cap_P
538 .comm OPENSSL_ia32cap_P,16,4
539 .section .init
540 call OPENSSL_cpuid_setup
541 #else
542 .text
543 .globl OPENSSL_ia32_cpuid
544 .type OPENSSL_ia32_cpuid,@function
545 .align 16
546 OPENSSL_ia32_cpuid:
547 .L_OPENSSL_ia32_cpuid_begin:
548 pushl %ebp
549 pushl %ebx
550 pushl %esi
551 pushl %edi
552 xorl %edx,%edx
553 pushfl
554 popl %eax
555 movl %eax,%ecx
556 xorl $2097152,%eax
557 pushl %eax
558 popfl
559 pushfl
560 popl %eax
561 xorl %eax,%ecx
562 xorl %eax,%eax
563 movl 20(%esp),%esi
564 movl %eax,8(%esi)
565 btl $21,%ecx
566 jnc .L000nocpuid
567 .byte 0x0f,0xa2
568 movl %eax,%edi
569 xorl %eax,%eax
570 cmpl $1970169159,%ebx
571 setne %al
572 movl %eax,%ebp
573 cmpl $1231384169,%edx
574 setne %al
575 orl %eax,%ebp
576 cmpl $1818588270,%ecx
577 setne %al
578 orl %eax,%ebp
579 jz .L001intel
580 cmpl $1752462657,%ebx
581 setne %al
582 movl %eax,%esi
583 cmpl $1769238117,%edx
584 setne %al
585 orl %eax,%esi
586 cmpl $1145913699,%ecx
587 setne %al
588 orl %eax,%esi
589 jnz .L001intel
590 movl $2147483648,%eax
591 .byte 0x0f,0xa2
592 cmpl $2147483649,%eax
593 jb .L001intel
594 movl %eax,%esi
595 movl $2147483649,%eax
596 .byte 0x0f,0xa2
597 orl %ecx,%ebp
598 andl $2049,%ebp
599 cmpl $2147483656,%esi
600 jb .L001intel
601 movl $2147483656,%eax
602 .byte 0x0f,0xa2
603 movzbl %cl,%esi
604 incl %esi
605 movl $1,%eax
606 xorl %ecx,%ecx
607 .byte 0x0f,0xa2
608 btl $28,%edx
609 jnc .L002generic
610 shrl $16,%ebx
611 andl $255,%ebx
612 cmpl %esi,%ebx
613 ja .L002generic
614 andl $4026531839,%edx
615 jmp .L002generic
616 .L001intel:
617 cmpl $4,%edi
618 movl $-1,%esi
619 jb .L003nocacheinfo
620 movl $4,%eax
621 movl $0,%ecx
622 .byte 0x0f,0xa2
623 movl %eax,%esi
624 shrl $14,%esi
625 andl $4095,%esi
626 .L003nocacheinfo:
627 movl $1,%eax
628 xorl %ecx,%ecx
629 .byte 0x0f,0xa2
630 andl $3220176895,%edx
631 cmpl $0,%ebp
632 jne .L004notintel
633 orl $1073741824,%edx
634 andb $15,%ah
635 cmpb $15,%ah
636 jne .L004notintel
637 orl $1048576,%edx
638 .L004notintel:
639 btl $28,%edx
640 jnc .L002generic
641 andl $4026531839,%edx
642 cmpl $0,%esi
643 je .L002generic
644 orl $268435456,%edx
645 shrl $16,%ebx
646 cmpb $1,%bl
647 ja .L002generic
648 andl $4026531839,%edx
649 .L002generic:
650 andl $2048,%ebp
651 andl $4294965247,%ecx
652 movl %edx,%esi
653 orl %ecx,%ebp
654 cmpl $7,%edi
655 movl 20(%esp),%edi
656 jb .L005no_extended_info
657 movl $7,%eax
658 xorl %ecx,%ecx
659 .byte 0x0f,0xa2
660 movl %ebx,8(%edi)
661 .L005no_extended_info:
662 btl $27,%ebp
663 jnc .L006clear_avx
664 xorl %ecx,%ecx
665 .byte 15,1,208
666 andl $6,%eax
667 cmpl $6,%eax
668 je .L007done
669 cmpl $2,%eax
670 je .L006clear_avx
671 .L008clear_xmm:
672 andl $4261412861,%ebp
673 andl $4278190079,%esi
674 .L006clear_avx:
675 andl $4026525695,%ebp
676 andl $4294967263,8(%edi)
677 .L007done:
678 movl %esi,%eax
679 movl %ebp,%edx
680 .L000nocpuid:
681 popl %edi
682 popl %esi
683 popl %ebx
684 popl %ebp
685 ret
686 .size OPENSSL_ia32_cpuid,.-.L_OPENSSL_ia32_cpuid_begin
687 .globl OPENSSL_rdtsc
688 .type OPENSSL_rdtsc,@function
689 .align 16
690 OPENSSL_rdtsc:
691 .L_OPENSSL_rdtsc_begin:
692 xorl %eax,%eax
693 xorl %edx,%edx
694 leal OPENSSL_ia32cap_P,%ecx
695 btl $4,(%ecx)
696 jnc .L009notsc
697 .byte 0x0f,0x31
698 .L009notsc:
699 ret
700 .size OPENSSL_rdtsc,.-.L_OPENSSL_rdtsc_begin
701 .globl OPENSSL_instrument_halt
702 .type OPENSSL_instrument_halt,@function
703 .align 16
704 OPENSSL_instrument_halt:
705 .L_OPENSSL_instrument_halt_begin:
706 leal OPENSSL_ia32cap_P,%ecx
707 btl $4,(%ecx)
708 jnc .L010nohalt
709 .long 2421723150
710 andl $3,%eax
711 jnz .L010nohalt
712 pushfl
713 popl %eax
714 btl $9,%eax
715 jnc .L010nohalt
716 .byte 0x0f,0x31
717 pushl %edx
718 pushl %eax
719 hlt
720 .byte 0x0f,0x31
721 subl (%esp),%eax
722 sbbl 4(%esp),%edx
723 addl $8,%esp
724 ret
725 .L010nohalt:
726 xorl %eax,%eax
727 xorl %edx,%edx
728 ret
729 .size OPENSSL_instrument_halt,.-.L_OPENSSL_instrument_halt_begin
730 .globl OPENSSL_far_spin
731 .type OPENSSL_far_spin,@function
732 .align 16
733 OPENSSL_far_spin:
734 .L_OPENSSL_far_spin_begin:
735 pushfl
736 popl %eax
737 btl $9,%eax
738 jnc .L011nospin
739 movl 4(%esp),%eax
740 movl 8(%esp),%ecx
741 .long 2430111262
742 xorl %eax,%eax
743 movl (%ecx),%edx
744 jmp .L012spin
745 .align 16
746 .L012spin:
747 incl %eax
748 cmpl (%ecx),%edx
749 je .L012spin
750 .long 529567888
751 ret
752 .L011nospin:
753 xorl %eax,%eax
754 xorl %edx,%edx
755 ret
756 .size OPENSSL_far_spin,.-.L_OPENSSL_far_spin_begin
757 .globl OPENSSL_wipe_cpu
758 .type OPENSSL_wipe_cpu,@function
759 .align 16
760 OPENSSL_wipe_cpu:
761 .L_OPENSSL_wipe_cpu_begin:
762 xorl %eax,%eax
763 xorl %edx,%edx
764 leal OPENSSL_ia32cap_P,%ecx
765 movl (%ecx),%ecx
766 btl $1,(%ecx)
767 jnc .L013no_x87
768 andl $83886080,%ecx
769 cmpl $83886080,%ecx
770 jne .L014no_sse2
771 pxor %xmm0,%xmm0
772 pxor %xmm1,%xmm1
773 pxor %xmm2,%xmm2
774 pxor %xmm3,%xmm3
775 pxor %xmm4,%xmm4
776 pxor %xmm5,%xmm5
777 pxor %xmm6,%xmm6
778 pxor %xmm7,%xmm7
779 .L014no_sse2:
780 .long 4007259865,4007259865,4007259865,4007259865,2430851995
781 .L013no_x87:
782 leal 4(%esp),%eax
783 ret
784 .size OPENSSL_wipe_cpu,.-.L_OPENSSL_wipe_cpu_begin
785 .globl OPENSSL_atomic_add
786 .type OPENSSL_atomic_add,@function
787 .align 16
788 OPENSSL_atomic_add:
789 .L_OPENSSL_atomic_add_begin:
790 movl 4(%esp),%edx
791 movl 8(%esp),%ecx
792 pushl %ebx
793 nop
794 movl (%edx),%eax
795 .L015spin:
796 leal (%eax,%ecx,1),%ebx
797 nop
798 .long 447811568
799 jne .L015spin
800 movl %ebx,%eax
801 popl %ebx
802 ret
803 .size OPENSSL_atomic_add,.-.L_OPENSSL_atomic_add_begin
804 .globl OPENSSL_cleanse
805 .type OPENSSL_cleanse,@function
806 .align 16
807 OPENSSL_cleanse:
808 .L_OPENSSL_cleanse_begin:
809 movl 4(%esp),%edx
810 movl 8(%esp),%ecx
811 xorl %eax,%eax
812 cmpl $7,%ecx
813 jae .L016lot
814 cmpl $0,%ecx
815 je .L017ret
816 .L018little:
817 movb %al,(%edx)
818 subl $1,%ecx
819 leal 1(%edx),%edx
820 jnz .L018little
821 .L017ret:
822 ret
823 .align 16
824 .L016lot:
825 testl $3,%edx
826 jz .L019aligned
827 movb %al,(%edx)
828 leal -1(%ecx),%ecx
829 leal 1(%edx),%edx
830 jmp .L016lot
831 .L019aligned:
832 movl %eax,(%edx)
833 leal -4(%ecx),%ecx
834 testl $-4,%ecx
835 leal 4(%edx),%edx
836 jnz .L019aligned
837 cmpl $0,%ecx
838 jne .L018little
839 ret
840 .size OPENSSL_cleanse,.-.L_OPENSSL_cleanse_begin
841 .globl CRYPTO_memcmp
842 .type CRYPTO_memcmp,@function
843 .align 16
844 CRYPTO_memcmp:
845 .L_CRYPTO_memcmp_begin:
846 pushl %esi
847 pushl %edi
848 movl 12(%esp),%esi
849 movl 16(%esp),%edi
850 movl 20(%esp),%ecx
851 xorl %eax,%eax
852 xorl %edx,%edx
853 cmpl $0,%ecx
854 je .L020no_data
855 .L021loop:
856 movb (%esi),%dl
857 leal 1(%esi),%esi
858 xorb (%edi),%dl
859 leal 1(%edi),%edi
860 orb %dl,%al
861 decl %ecx
862 jnz .L021loop
863 negl %eax
864 shrl $31,%eax
865 .L020no_data:
866 popl %edi
867 popl %esi
868 ret
869 .size CRYPTO_memcmp,.-.L_CRYPTO_memcmp_begin
870 .globl OPENSSL_instrument_bus
871 .type OPENSSL_instrument_bus,@function
872 .align 16
873 OPENSSL_instrument_bus:
874 .L_OPENSSL_instrument_bus_begin:
875 pushl %ebp
876 pushl %ebx
877 pushl %esi
878 pushl %edi
879 movl $0,%eax
880 leal OPENSSL_ia32cap_P,%edx
881 btl $4,(%edx)
882 jnc .L022nogo
883 btl $19,(%edx)
884 jnc .L022nogo
885 movl 20(%esp),%edi
886 movl 24(%esp),%ecx
887 .byte 0x0f,0x31
888 movl %eax,%esi
889 movl $0,%ebx
890 clflush (%edi)
891 .byte 240
892 addl %ebx,(%edi)
893 jmp .L023loop
894 .align 16
895 .L023loop:
896 .byte 0x0f,0x31
897 movl %eax,%edx
898 subl %esi,%eax
899 movl %edx,%esi
900 movl %eax,%ebx
901 clflush (%edi)
902 .byte 240
903 addl %eax,(%edi)
904 leal 4(%edi),%edi
905 subl $1,%ecx
906 jnz .L023loop
907 movl 24(%esp),%eax
908 .L022nogo:
909 popl %edi
910 popl %esi
911 popl %ebx
912 popl %ebp
913 ret
914 .size OPENSSL_instrument_bus,.-.L_OPENSSL_instrument_bus_begin
915 .globl OPENSSL_instrument_bus2
916 .type OPENSSL_instrument_bus2,@function
917 .align 16
918 OPENSSL_instrument_bus2:
919 .L_OPENSSL_instrument_bus2_begin:
920 pushl %ebp
921 pushl %ebx
922 pushl %esi
923 pushl %edi
924 movl $0,%eax
925 leal OPENSSL_ia32cap_P,%edx
926 btl $4,(%edx)
927 jnc .L024nogo
928 btl $19,(%edx)
929 jnc .L024nogo
930 movl 20(%esp),%edi
931 movl 24(%esp),%ecx
932 movl 28(%esp),%ebp
933 .byte 0x0f,0x31
934 movl %eax,%esi
935 movl $0,%ebx
936 clflush (%edi)
937 .byte 240
938 addl %ebx,(%edi)
939 .byte 0x0f,0x31
940 movl %eax,%edx
941 subl %esi,%eax
942 movl %edx,%esi
943 movl %eax,%ebx
944 jmp .L025loop2
945 .align 16
946 .L025loop2:
947 clflush (%edi)
948 .byte 240
949 addl %eax,(%edi)
950 subl $1,%ebp
951 jz .L026done2
952 .byte 0x0f,0x31
953 movl %eax,%edx
954 subl %esi,%eax
955 movl %edx,%esi
956 cmpl %ebx,%eax
957 movl %eax,%ebx
958 movl $0,%edx
959 setne %dl
960 subl %edx,%ecx
961 leal (%edi,%edx,4),%edi
962 jnz .L025loop2
963 .L026done2:
964 movl 24(%esp),%eax
965 subl %ecx,%eax
966 .L024nogo:
967 popl %edi
968 popl %esi
969 popl %ebx
970 popl %ebp
971 ret
972 .size OPENSSL_instrument_bus2,.-.L_OPENSSL_instrument_bus2_begin
973 .globl OPENSSL_ia32_rdrand_bytes
974 .type OPENSSL_ia32_rdrand_bytes,@function
975 .align 16
976 OPENSSL_ia32_rdrand_bytes:
977 .L_OPENSSL_ia32_rdrand_bytes_begin:
978 pushl %edi
979 pushl %ebx
980 xorl %eax,%eax
981 movl 12(%esp),%edi
982 movl 16(%esp),%ebx
983 cmpl $0,%ebx
984 je .L027done
985 movl $8,%ecx
986 .L028loop:
987 .byte 15,199,242
988 jc .L029break
989 loop .L028loop
990 jmp .L027done
991 .align 16
992 .L029break:
993 cmpl $4,%ebx
994 jb .L030tail
995 movl %edx,(%edi)
996 leal 4(%edi),%edi
997 addl $4,%eax
998 subl $4,%ebx
999 jz .L027done
1000 movl $8,%ecx
1001 jmp .L028loop
1002 .align 16
1003 .L030tail:
1004 movb %dl,(%edi)
1005 leal 1(%edi),%edi
1006 incl %eax
1007 shrl $8,%edx
1008 decl %ebx
1009 jnz .L030tail
1010 .L027done:
1011 xorl %edx,%edx
1012 popl %ebx
1013 popl %edi
1014 ret
1015 .size OPENSSL_ia32_rdrand_bytes,.-.L_OPENSSL_ia32_rdrand_bytes_begin
1016 .globl OPENSSL_ia32_rdseed_bytes
1017 .type OPENSSL_ia32_rdseed_bytes,@function
1018 .align 16
1019 OPENSSL_ia32_rdseed_bytes:
1020 .L_OPENSSL_ia32_rdseed_bytes_begin:
1021 pushl %edi
1022 pushl %ebx
1023 xorl %eax,%eax
1024 movl 12(%esp),%edi
1025 movl 16(%esp),%ebx
1026 cmpl $0,%ebx
1027 je .L031done
1028 movl $8,%ecx
1029 .L032loop:
1030 .byte 15,199,250
1031 jc .L033break
1032 loop .L032loop
1033 jmp .L031done
1034 .align 16
1035 .L033break:
1036 cmpl $4,%ebx
1037 jb .L034tail
1038 movl %edx,(%edi)
1039 leal 4(%edi),%edi
1040 addl $4,%eax
1041 subl $4,%ebx
1042 jz .L031done
1043 movl $8,%ecx
1044 jmp .L032loop
1045 .align 16
1046 .L034tail:
1047 movb %dl,(%edi)
1048 leal 1(%edi),%edi
1049 incl %eax
1050 shrl $8,%edx
1051 decl %ebx
1052 jnz .L034tail
1053 .L031done:
1054 xorl %edx,%edx
1055 popl %ebx
1056 popl %edi
1057 ret
1058 .size OPENSSL_ia32_rdseed_bytes,.-.L_OPENSSL_ia32_rdseed_bytes_begin
1059 .hidden OPENSSL_cpuid_setup
1060 .hidden OPENSSL_ia32cap_P
1061 .comm OPENSSL_ia32cap_P,16,4
1062 .section .init
1063 call OPENSSL_cpuid_setup
1064 #endif
Cache object: 69d67b7ba1d52c17698de22429e7b91f
|