]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/crypto/openssl/i386/x86cpuid.S
Move generated OpenSSL assembly routines into the kernel sources.
[FreeBSD/FreeBSD.git] / sys / crypto / openssl / i386 / x86cpuid.S
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