]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - secure/lib/libcrypto/i386/x86cpuid.S
Hide OPENSSL_cpuid_setup and OPENSSL_ia32cap_P symbols from libcrypto.so.
[FreeBSD/stable/10.git] / secure / lib / libcrypto / i386 / x86cpuid.S
1 # $FreeBSD$
2 # Do not modify. This file is auto-generated from x86cpuid.pl.
3 #ifdef PIC
4 .file   "x86cpuid.S"
5 .text
6 .globl  OPENSSL_ia32_cpuid
7 .type   OPENSSL_ia32_cpuid,@function
8 .align  16
9 OPENSSL_ia32_cpuid:
10 .L_OPENSSL_ia32_cpuid_begin:
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         btl     $21,%ecx
27         jnc     .L000nocpuid
28         .byte   0x0f,0xa2
29         movl    %eax,%edi
30         xorl    %eax,%eax
31         cmpl    $1970169159,%ebx
32         setne   %al
33         movl    %eax,%ebp
34         cmpl    $1231384169,%edx
35         setne   %al
36         orl     %eax,%ebp
37         cmpl    $1818588270,%ecx
38         setne   %al
39         orl     %eax,%ebp
40         jz      .L001intel
41         cmpl    $1752462657,%ebx
42         setne   %al
43         movl    %eax,%esi
44         cmpl    $1769238117,%edx
45         setne   %al
46         orl     %eax,%esi
47         cmpl    $1145913699,%ecx
48         setne   %al
49         orl     %eax,%esi
50         jnz     .L001intel
51         movl    $2147483648,%eax
52         .byte   0x0f,0xa2
53         cmpl    $2147483649,%eax
54         jb      .L001intel
55         movl    %eax,%esi
56         movl    $2147483649,%eax
57         .byte   0x0f,0xa2
58         orl     %ecx,%ebp
59         andl    $2049,%ebp
60         cmpl    $2147483656,%esi
61         jb      .L001intel
62         movl    $2147483656,%eax
63         .byte   0x0f,0xa2
64         movzbl  %cl,%esi
65         incl    %esi
66         movl    $1,%eax
67         xorl    %ecx,%ecx
68         .byte   0x0f,0xa2
69         btl     $28,%edx
70         jnc     .L002generic
71         shrl    $16,%ebx
72         andl    $255,%ebx
73         cmpl    %esi,%ebx
74         ja      .L002generic
75         andl    $4026531839,%edx
76         jmp     .L002generic
77 .L001intel:
78         cmpl    $4,%edi
79         movl    $-1,%edi
80         jb      .L003nocacheinfo
81         movl    $4,%eax
82         movl    $0,%ecx
83         .byte   0x0f,0xa2
84         movl    %eax,%edi
85         shrl    $14,%edi
86         andl    $4095,%edi
87 .L003nocacheinfo:
88         movl    $1,%eax
89         xorl    %ecx,%ecx
90         .byte   0x0f,0xa2
91         andl    $3220176895,%edx
92         cmpl    $0,%ebp
93         jne     .L004notintel
94         orl     $1073741824,%edx
95         andb    $15,%ah
96         cmpb    $15,%ah
97         jne     .L004notintel
98         orl     $1048576,%edx
99 .L004notintel:
100         btl     $28,%edx
101         jnc     .L002generic
102         andl    $4026531839,%edx
103         cmpl    $0,%edi
104         je      .L002generic
105         orl     $268435456,%edx
106         shrl    $16,%ebx
107         cmpb    $1,%bl
108         ja      .L002generic
109         andl    $4026531839,%edx
110 .L002generic:
111         andl    $2048,%ebp
112         andl    $4294965247,%ecx
113         movl    %edx,%esi
114         orl     %ecx,%ebp
115         btl     $27,%ecx
116         jnc     .L005clear_avx
117         xorl    %ecx,%ecx
118 .byte   15,1,208
119         andl    $6,%eax
120         cmpl    $6,%eax
121         je      .L006done
122         cmpl    $2,%eax
123         je      .L005clear_avx
124 .L007clear_xmm:
125         andl    $4261412861,%ebp
126         andl    $4278190079,%esi
127 .L005clear_avx:
128         andl    $4026525695,%ebp
129 .L006done:
130         movl    %esi,%eax
131         movl    %ebp,%edx
132 .L000nocpuid:
133         popl    %edi
134         popl    %esi
135         popl    %ebx
136         popl    %ebp
137         ret
138 .size   OPENSSL_ia32_cpuid,.-.L_OPENSSL_ia32_cpuid_begin
139 .globl  OPENSSL_rdtsc
140 .type   OPENSSL_rdtsc,@function
141 .align  16
142 OPENSSL_rdtsc:
143 .L_OPENSSL_rdtsc_begin:
144         xorl    %eax,%eax
145         xorl    %edx,%edx
146         call    .L008PIC_me_up
147 .L008PIC_me_up:
148         popl    %ecx
149         leal    _GLOBAL_OFFSET_TABLE_+[.-.L008PIC_me_up](%ecx),%ecx
150         movl    OPENSSL_ia32cap_P@GOT(%ecx),%ecx
151         btl     $4,(%ecx)
152         jnc     .L009notsc
153         .byte   0x0f,0x31
154 .L009notsc:
155         ret
156 .size   OPENSSL_rdtsc,.-.L_OPENSSL_rdtsc_begin
157 .globl  OPENSSL_instrument_halt
158 .type   OPENSSL_instrument_halt,@function
159 .align  16
160 OPENSSL_instrument_halt:
161 .L_OPENSSL_instrument_halt_begin:
162         call    .L010PIC_me_up
163 .L010PIC_me_up:
164         popl    %ecx
165         leal    _GLOBAL_OFFSET_TABLE_+[.-.L010PIC_me_up](%ecx),%ecx
166         movl    OPENSSL_ia32cap_P@GOT(%ecx),%ecx
167         btl     $4,(%ecx)
168         jnc     .L011nohalt
169 .long   2421723150
170         andl    $3,%eax
171         jnz     .L011nohalt
172         pushfl
173         popl    %eax
174         btl     $9,%eax
175         jnc     .L011nohalt
176         .byte   0x0f,0x31
177         pushl   %edx
178         pushl   %eax
179         hlt
180         .byte   0x0f,0x31
181         subl    (%esp),%eax
182         sbbl    4(%esp),%edx
183         addl    $8,%esp
184         ret
185 .L011nohalt:
186         xorl    %eax,%eax
187         xorl    %edx,%edx
188         ret
189 .size   OPENSSL_instrument_halt,.-.L_OPENSSL_instrument_halt_begin
190 .globl  OPENSSL_far_spin
191 .type   OPENSSL_far_spin,@function
192 .align  16
193 OPENSSL_far_spin:
194 .L_OPENSSL_far_spin_begin:
195         pushfl
196         popl    %eax
197         btl     $9,%eax
198         jnc     .L012nospin
199         movl    4(%esp),%eax
200         movl    8(%esp),%ecx
201 .long   2430111262
202         xorl    %eax,%eax
203         movl    (%ecx),%edx
204         jmp     .L013spin
205 .align  16
206 .L013spin:
207         incl    %eax
208         cmpl    (%ecx),%edx
209         je      .L013spin
210 .long   529567888
211         ret
212 .L012nospin:
213         xorl    %eax,%eax
214         xorl    %edx,%edx
215         ret
216 .size   OPENSSL_far_spin,.-.L_OPENSSL_far_spin_begin
217 .globl  OPENSSL_wipe_cpu
218 .type   OPENSSL_wipe_cpu,@function
219 .align  16
220 OPENSSL_wipe_cpu:
221 .L_OPENSSL_wipe_cpu_begin:
222         xorl    %eax,%eax
223         xorl    %edx,%edx
224         call    .L014PIC_me_up
225 .L014PIC_me_up:
226         popl    %ecx
227         leal    _GLOBAL_OFFSET_TABLE_+[.-.L014PIC_me_up](%ecx),%ecx
228         movl    OPENSSL_ia32cap_P@GOT(%ecx),%ecx
229         movl    (%ecx),%ecx
230         btl     $1,(%ecx)
231         jnc     .L015no_x87
232         andl    $83886080,%ecx
233         cmpl    $83886080,%ecx
234         jne     .L016no_sse2
235         pxor    %xmm0,%xmm0
236         pxor    %xmm1,%xmm1
237         pxor    %xmm2,%xmm2
238         pxor    %xmm3,%xmm3
239         pxor    %xmm4,%xmm4
240         pxor    %xmm5,%xmm5
241         pxor    %xmm6,%xmm6
242         pxor    %xmm7,%xmm7
243 .L016no_sse2:
244 .long   4007259865,4007259865,4007259865,4007259865,2430851995
245 .L015no_x87:
246         leal    4(%esp),%eax
247         ret
248 .size   OPENSSL_wipe_cpu,.-.L_OPENSSL_wipe_cpu_begin
249 .globl  OPENSSL_atomic_add
250 .type   OPENSSL_atomic_add,@function
251 .align  16
252 OPENSSL_atomic_add:
253 .L_OPENSSL_atomic_add_begin:
254         movl    4(%esp),%edx
255         movl    8(%esp),%ecx
256         pushl   %ebx
257         nop
258         movl    (%edx),%eax
259 .L017spin:
260         leal    (%eax,%ecx,1),%ebx
261         nop
262 .long   447811568
263         jne     .L017spin
264         movl    %ebx,%eax
265         popl    %ebx
266         ret
267 .size   OPENSSL_atomic_add,.-.L_OPENSSL_atomic_add_begin
268 .globl  OPENSSL_indirect_call
269 .type   OPENSSL_indirect_call,@function
270 .align  16
271 OPENSSL_indirect_call:
272 .L_OPENSSL_indirect_call_begin:
273         pushl   %ebp
274         movl    %esp,%ebp
275         subl    $28,%esp
276         movl    12(%ebp),%ecx
277         movl    %ecx,(%esp)
278         movl    16(%ebp),%edx
279         movl    %edx,4(%esp)
280         movl    20(%ebp),%eax
281         movl    %eax,8(%esp)
282         movl    24(%ebp),%eax
283         movl    %eax,12(%esp)
284         movl    28(%ebp),%eax
285         movl    %eax,16(%esp)
286         movl    32(%ebp),%eax
287         movl    %eax,20(%esp)
288         movl    36(%ebp),%eax
289         movl    %eax,24(%esp)
290         call    *8(%ebp)
291         movl    %ebp,%esp
292         popl    %ebp
293         ret
294 .size   OPENSSL_indirect_call,.-.L_OPENSSL_indirect_call_begin
295 .globl  OPENSSL_cleanse
296 .type   OPENSSL_cleanse,@function
297 .align  16
298 OPENSSL_cleanse:
299 .L_OPENSSL_cleanse_begin:
300         movl    4(%esp),%edx
301         movl    8(%esp),%ecx
302         xorl    %eax,%eax
303         cmpl    $7,%ecx
304         jae     .L018lot
305         cmpl    $0,%ecx
306         je      .L019ret
307 .L020little:
308         movb    %al,(%edx)
309         subl    $1,%ecx
310         leal    1(%edx),%edx
311         jnz     .L020little
312 .L019ret:
313         ret
314 .align  16
315 .L018lot:
316         testl   $3,%edx
317         jz      .L021aligned
318         movb    %al,(%edx)
319         leal    -1(%ecx),%ecx
320         leal    1(%edx),%edx
321         jmp     .L018lot
322 .L021aligned:
323         movl    %eax,(%edx)
324         leal    -4(%ecx),%ecx
325         testl   $-4,%ecx
326         leal    4(%edx),%edx
327         jnz     .L021aligned
328         cmpl    $0,%ecx
329         jne     .L020little
330         ret
331 .size   OPENSSL_cleanse,.-.L_OPENSSL_cleanse_begin
332 .globl  OPENSSL_ia32_rdrand
333 .type   OPENSSL_ia32_rdrand,@function
334 .align  16
335 OPENSSL_ia32_rdrand:
336 .L_OPENSSL_ia32_rdrand_begin:
337         movl    $8,%ecx
338 .L022loop:
339 .byte   15,199,240
340         jc      .L023break
341         loop    .L022loop
342 .L023break:
343         cmpl    $0,%eax
344         cmovel  %ecx,%eax
345         ret
346 .size   OPENSSL_ia32_rdrand,.-.L_OPENSSL_ia32_rdrand_begin
347 .hidden OPENSSL_cpuid_setup
348 .hidden OPENSSL_ia32cap_P
349 .comm   OPENSSL_ia32cap_P,8,4
350 .section        .init
351         call    OPENSSL_cpuid_setup
352 #else
353 .file   "x86cpuid.S"
354 .text
355 .globl  OPENSSL_ia32_cpuid
356 .type   OPENSSL_ia32_cpuid,@function
357 .align  16
358 OPENSSL_ia32_cpuid:
359 .L_OPENSSL_ia32_cpuid_begin:
360         pushl   %ebp
361         pushl   %ebx
362         pushl   %esi
363         pushl   %edi
364         xorl    %edx,%edx
365         pushfl
366         popl    %eax
367         movl    %eax,%ecx
368         xorl    $2097152,%eax
369         pushl   %eax
370         popfl
371         pushfl
372         popl    %eax
373         xorl    %eax,%ecx
374         xorl    %eax,%eax
375         btl     $21,%ecx
376         jnc     .L000nocpuid
377         .byte   0x0f,0xa2
378         movl    %eax,%edi
379         xorl    %eax,%eax
380         cmpl    $1970169159,%ebx
381         setne   %al
382         movl    %eax,%ebp
383         cmpl    $1231384169,%edx
384         setne   %al
385         orl     %eax,%ebp
386         cmpl    $1818588270,%ecx
387         setne   %al
388         orl     %eax,%ebp
389         jz      .L001intel
390         cmpl    $1752462657,%ebx
391         setne   %al
392         movl    %eax,%esi
393         cmpl    $1769238117,%edx
394         setne   %al
395         orl     %eax,%esi
396         cmpl    $1145913699,%ecx
397         setne   %al
398         orl     %eax,%esi
399         jnz     .L001intel
400         movl    $2147483648,%eax
401         .byte   0x0f,0xa2
402         cmpl    $2147483649,%eax
403         jb      .L001intel
404         movl    %eax,%esi
405         movl    $2147483649,%eax
406         .byte   0x0f,0xa2
407         orl     %ecx,%ebp
408         andl    $2049,%ebp
409         cmpl    $2147483656,%esi
410         jb      .L001intel
411         movl    $2147483656,%eax
412         .byte   0x0f,0xa2
413         movzbl  %cl,%esi
414         incl    %esi
415         movl    $1,%eax
416         xorl    %ecx,%ecx
417         .byte   0x0f,0xa2
418         btl     $28,%edx
419         jnc     .L002generic
420         shrl    $16,%ebx
421         andl    $255,%ebx
422         cmpl    %esi,%ebx
423         ja      .L002generic
424         andl    $4026531839,%edx
425         jmp     .L002generic
426 .L001intel:
427         cmpl    $4,%edi
428         movl    $-1,%edi
429         jb      .L003nocacheinfo
430         movl    $4,%eax
431         movl    $0,%ecx
432         .byte   0x0f,0xa2
433         movl    %eax,%edi
434         shrl    $14,%edi
435         andl    $4095,%edi
436 .L003nocacheinfo:
437         movl    $1,%eax
438         xorl    %ecx,%ecx
439         .byte   0x0f,0xa2
440         andl    $3220176895,%edx
441         cmpl    $0,%ebp
442         jne     .L004notintel
443         orl     $1073741824,%edx
444         andb    $15,%ah
445         cmpb    $15,%ah
446         jne     .L004notintel
447         orl     $1048576,%edx
448 .L004notintel:
449         btl     $28,%edx
450         jnc     .L002generic
451         andl    $4026531839,%edx
452         cmpl    $0,%edi
453         je      .L002generic
454         orl     $268435456,%edx
455         shrl    $16,%ebx
456         cmpb    $1,%bl
457         ja      .L002generic
458         andl    $4026531839,%edx
459 .L002generic:
460         andl    $2048,%ebp
461         andl    $4294965247,%ecx
462         movl    %edx,%esi
463         orl     %ecx,%ebp
464         btl     $27,%ecx
465         jnc     .L005clear_avx
466         xorl    %ecx,%ecx
467 .byte   15,1,208
468         andl    $6,%eax
469         cmpl    $6,%eax
470         je      .L006done
471         cmpl    $2,%eax
472         je      .L005clear_avx
473 .L007clear_xmm:
474         andl    $4261412861,%ebp
475         andl    $4278190079,%esi
476 .L005clear_avx:
477         andl    $4026525695,%ebp
478 .L006done:
479         movl    %esi,%eax
480         movl    %ebp,%edx
481 .L000nocpuid:
482         popl    %edi
483         popl    %esi
484         popl    %ebx
485         popl    %ebp
486         ret
487 .size   OPENSSL_ia32_cpuid,.-.L_OPENSSL_ia32_cpuid_begin
488 .globl  OPENSSL_rdtsc
489 .type   OPENSSL_rdtsc,@function
490 .align  16
491 OPENSSL_rdtsc:
492 .L_OPENSSL_rdtsc_begin:
493         xorl    %eax,%eax
494         xorl    %edx,%edx
495         leal    OPENSSL_ia32cap_P,%ecx
496         btl     $4,(%ecx)
497         jnc     .L008notsc
498         .byte   0x0f,0x31
499 .L008notsc:
500         ret
501 .size   OPENSSL_rdtsc,.-.L_OPENSSL_rdtsc_begin
502 .globl  OPENSSL_instrument_halt
503 .type   OPENSSL_instrument_halt,@function
504 .align  16
505 OPENSSL_instrument_halt:
506 .L_OPENSSL_instrument_halt_begin:
507         leal    OPENSSL_ia32cap_P,%ecx
508         btl     $4,(%ecx)
509         jnc     .L009nohalt
510 .long   2421723150
511         andl    $3,%eax
512         jnz     .L009nohalt
513         pushfl
514         popl    %eax
515         btl     $9,%eax
516         jnc     .L009nohalt
517         .byte   0x0f,0x31
518         pushl   %edx
519         pushl   %eax
520         hlt
521         .byte   0x0f,0x31
522         subl    (%esp),%eax
523         sbbl    4(%esp),%edx
524         addl    $8,%esp
525         ret
526 .L009nohalt:
527         xorl    %eax,%eax
528         xorl    %edx,%edx
529         ret
530 .size   OPENSSL_instrument_halt,.-.L_OPENSSL_instrument_halt_begin
531 .globl  OPENSSL_far_spin
532 .type   OPENSSL_far_spin,@function
533 .align  16
534 OPENSSL_far_spin:
535 .L_OPENSSL_far_spin_begin:
536         pushfl
537         popl    %eax
538         btl     $9,%eax
539         jnc     .L010nospin
540         movl    4(%esp),%eax
541         movl    8(%esp),%ecx
542 .long   2430111262
543         xorl    %eax,%eax
544         movl    (%ecx),%edx
545         jmp     .L011spin
546 .align  16
547 .L011spin:
548         incl    %eax
549         cmpl    (%ecx),%edx
550         je      .L011spin
551 .long   529567888
552         ret
553 .L010nospin:
554         xorl    %eax,%eax
555         xorl    %edx,%edx
556         ret
557 .size   OPENSSL_far_spin,.-.L_OPENSSL_far_spin_begin
558 .globl  OPENSSL_wipe_cpu
559 .type   OPENSSL_wipe_cpu,@function
560 .align  16
561 OPENSSL_wipe_cpu:
562 .L_OPENSSL_wipe_cpu_begin:
563         xorl    %eax,%eax
564         xorl    %edx,%edx
565         leal    OPENSSL_ia32cap_P,%ecx
566         movl    (%ecx),%ecx
567         btl     $1,(%ecx)
568         jnc     .L012no_x87
569         andl    $83886080,%ecx
570         cmpl    $83886080,%ecx
571         jne     .L013no_sse2
572         pxor    %xmm0,%xmm0
573         pxor    %xmm1,%xmm1
574         pxor    %xmm2,%xmm2
575         pxor    %xmm3,%xmm3
576         pxor    %xmm4,%xmm4
577         pxor    %xmm5,%xmm5
578         pxor    %xmm6,%xmm6
579         pxor    %xmm7,%xmm7
580 .L013no_sse2:
581 .long   4007259865,4007259865,4007259865,4007259865,2430851995
582 .L012no_x87:
583         leal    4(%esp),%eax
584         ret
585 .size   OPENSSL_wipe_cpu,.-.L_OPENSSL_wipe_cpu_begin
586 .globl  OPENSSL_atomic_add
587 .type   OPENSSL_atomic_add,@function
588 .align  16
589 OPENSSL_atomic_add:
590 .L_OPENSSL_atomic_add_begin:
591         movl    4(%esp),%edx
592         movl    8(%esp),%ecx
593         pushl   %ebx
594         nop
595         movl    (%edx),%eax
596 .L014spin:
597         leal    (%eax,%ecx,1),%ebx
598         nop
599 .long   447811568
600         jne     .L014spin
601         movl    %ebx,%eax
602         popl    %ebx
603         ret
604 .size   OPENSSL_atomic_add,.-.L_OPENSSL_atomic_add_begin
605 .globl  OPENSSL_indirect_call
606 .type   OPENSSL_indirect_call,@function
607 .align  16
608 OPENSSL_indirect_call:
609 .L_OPENSSL_indirect_call_begin:
610         pushl   %ebp
611         movl    %esp,%ebp
612         subl    $28,%esp
613         movl    12(%ebp),%ecx
614         movl    %ecx,(%esp)
615         movl    16(%ebp),%edx
616         movl    %edx,4(%esp)
617         movl    20(%ebp),%eax
618         movl    %eax,8(%esp)
619         movl    24(%ebp),%eax
620         movl    %eax,12(%esp)
621         movl    28(%ebp),%eax
622         movl    %eax,16(%esp)
623         movl    32(%ebp),%eax
624         movl    %eax,20(%esp)
625         movl    36(%ebp),%eax
626         movl    %eax,24(%esp)
627         call    *8(%ebp)
628         movl    %ebp,%esp
629         popl    %ebp
630         ret
631 .size   OPENSSL_indirect_call,.-.L_OPENSSL_indirect_call_begin
632 .globl  OPENSSL_cleanse
633 .type   OPENSSL_cleanse,@function
634 .align  16
635 OPENSSL_cleanse:
636 .L_OPENSSL_cleanse_begin:
637         movl    4(%esp),%edx
638         movl    8(%esp),%ecx
639         xorl    %eax,%eax
640         cmpl    $7,%ecx
641         jae     .L015lot
642         cmpl    $0,%ecx
643         je      .L016ret
644 .L017little:
645         movb    %al,(%edx)
646         subl    $1,%ecx
647         leal    1(%edx),%edx
648         jnz     .L017little
649 .L016ret:
650         ret
651 .align  16
652 .L015lot:
653         testl   $3,%edx
654         jz      .L018aligned
655         movb    %al,(%edx)
656         leal    -1(%ecx),%ecx
657         leal    1(%edx),%edx
658         jmp     .L015lot
659 .L018aligned:
660         movl    %eax,(%edx)
661         leal    -4(%ecx),%ecx
662         testl   $-4,%ecx
663         leal    4(%edx),%edx
664         jnz     .L018aligned
665         cmpl    $0,%ecx
666         jne     .L017little
667         ret
668 .size   OPENSSL_cleanse,.-.L_OPENSSL_cleanse_begin
669 .globl  OPENSSL_ia32_rdrand
670 .type   OPENSSL_ia32_rdrand,@function
671 .align  16
672 OPENSSL_ia32_rdrand:
673 .L_OPENSSL_ia32_rdrand_begin:
674         movl    $8,%ecx
675 .L019loop:
676 .byte   15,199,240
677         jc      .L020break
678         loop    .L019loop
679 .L020break:
680         cmpl    $0,%eax
681         cmovel  %ecx,%eax
682         ret
683 .size   OPENSSL_ia32_rdrand,.-.L_OPENSSL_ia32_rdrand_begin
684 .hidden OPENSSL_cpuid_setup
685 .hidden OPENSSL_ia32cap_P
686 .comm   OPENSSL_ia32cap_P,8,4
687 .section        .init
688         call    OPENSSL_cpuid_setup
689 #endif