security/nss/lib/freebl/mpi/mpcpucache_x86.s

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:7934b8c98537
1 / This Source Code Form is subject to the terms of the Mozilla Public
2 / License, v. 2.0. If a copy of the MPL was not distributed with this
3 / file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
5 .file "mpcpucache.c"
6 / .section .rodata.str1.1,"aMS",@progbits,1
7 .section .rodata
8 .LC0:
9 .string "GenuineIntel"
10 .LC1:
11 .string "AuthenticAMD"
12 .LC2:
13 .string "CyrixInstead"
14 .LC3:
15 .string "CentaurHauls"
16 .LC4:
17 .string "NexGenDriven"
18 .LC5:
19 .string "GenuineTMx86"
20 .LC6:
21 .string "RiseRiseRise"
22 .LC7:
23 .string "UMC UMC UMC "
24 .LC8:
25 .string "Sis Sis Sis "
26 .LC9:
27 .string "Geode by NSC"
28 .section .data.rel.ro.local,"aw",@progbits
29 .align 32
30 .type manMap, @object
31 .size manMap, 40
32 manMap:
33 .long .LC0
34 .long .LC1
35 .long .LC2
36 .long .LC3
37 .long .LC4
38 .long .LC5
39 .long .LC6
40 .long .LC7
41 .long .LC8
42 .long .LC9
43 .section .rodata
44 .align 32
45 .type CacheMap, @object
46 .size CacheMap, 512
47 CacheMap:
48 .byte 0
49 .byte 0
50 .byte 3
51 .byte 0
52 .byte 3
53 .byte 0
54 .byte 4
55 .byte 0
56 .byte 4
57 .zero 1
58 .byte 1
59 .byte 0
60 .byte 7
61 .byte 32
62 .byte 1
63 .byte 0
64 .byte 7
65 .byte 32
66 .byte 1
67 .byte 0
68 .byte 8
69 .byte 32
70 .byte 1
71 .byte 0
72 .byte 8
73 .byte 32
74 .byte 1
75 .byte 0
76 .byte 1
77 .byte 0
78 .byte 1
79 .byte 0
80 .byte 1
81 .byte 0
82 .byte 1
83 .byte 0
84 .byte 1
85 .byte 0
86 .byte 1
87 .byte 0
88 .byte 1
89 .byte 0
90 .byte 1
91 .byte 0
92 .byte 1
93 .byte 0
94 .byte 1
95 .byte 0
96 .byte 1
97 .byte 0
98 .byte 1
99 .byte 0
100 .byte 1
101 .byte 0
102 .byte 1
103 .byte 0
104 .byte 1
105 .byte 0
106 .byte 1
107 .byte 0
108 .byte 1
109 .byte 0
110 .byte 1
111 .byte 0
112 .byte 1
113 .byte 0
114 .byte 1
115 .byte 0
116 .byte 12
117 .byte 64
118 .byte 12
119 .byte 64
120 .byte 1
121 .byte 0
122 .byte 12
123 .byte 64
124 .byte 1
125 .byte 0
126 .byte 1
127 .byte 0
128 .byte 1
129 .byte 0
130 .byte 12
131 .byte 64
132 .byte 1
133 .byte 0
134 .byte 1
135 .byte 0
136 .byte 8
137 .byte 64
138 .byte 1
139 .byte 0
140 .byte 1
141 .byte 0
142 .byte 1
143 .byte 0
144 .byte 7
145 .byte 64
146 .byte 1
147 .byte 0
148 .byte 1
149 .byte 0
150 .byte 1
151 .byte 0
152 .byte 1
153 .byte 0
154 .byte 1
155 .byte 0
156 .byte 1
157 .byte 0
158 .byte 1
159 .byte 0
160 .byte 1
161 .byte 0
162 .byte 9
163 .byte 64
164 .byte 1
165 .byte 0
166 .byte 9
167 .byte 64
168 .byte 9
169 .byte 64
170 .byte 1
171 .byte 0
172 .byte 1
173 .byte 0
174 .byte 1
175 .byte 0
176 .byte 9
177 .byte 0
178 .byte 9
179 .byte 32
180 .byte 9
181 .byte 32
182 .byte 9
183 .byte 32
184 .byte 9
185 .byte 32
186 .byte 9
187 .byte 32
188 .byte 1
189 .byte 0
190 .byte 1
191 .byte 0
192 .byte 1
193 .byte 0
194 .byte 1
195 .byte 0
196 .byte 1
197 .byte 0
198 .byte 1
199 .byte 0
200 .byte 1
201 .byte 0
202 .byte 1
203 .byte 0
204 .byte 1
205 .byte 0
206 .byte 1
207 .byte 0
208 .byte 3
209 .byte 0
210 .byte 3
211 .byte 0
212 .byte 3
213 .byte 0
214 .byte 1
215 .byte 0
216 .byte 1
217 .byte 0
218 .byte 1
219 .byte 0
220 .byte 1
221 .byte 0
222 .byte 1
223 .byte 0
224 .byte 1
225 .byte 0
226 .byte 1
227 .byte 0
228 .byte 1
229 .byte 0
230 .byte 4
231 .byte 0
232 .byte 4
233 .byte 0
234 .byte 4
235 .byte 0
236 .byte 1
237 .byte 0
238 .byte 1
239 .byte 0
240 .byte 1
241 .byte 0
242 .byte 1
243 .byte 0
244 .byte 1
245 .byte 0
246 .byte 1
247 .byte 0
248 .byte 1
249 .byte 0
250 .byte 1
251 .byte 0
252 .byte 8
253 .byte 64
254 .byte 8
255 .byte 64
256 .byte 8
257 .byte 64
258 .byte 1
259 .byte 0
260 .byte 1
261 .byte 0
262 .byte 1
263 .byte 0
264 .byte 1
265 .byte 0
266 .byte 1
267 .byte 0
268 .byte 1
269 .byte 0
270 .byte 1
271 .byte 0
272 .byte 5
273 .byte 1
274 .byte 5
275 .byte 1
276 .byte 5
277 .byte 1
278 .byte 1
279 .byte 0
280 .byte 1
281 .byte 0
282 .byte 1
283 .byte 0
284 .byte 1
285 .byte 0
286 .byte 1
287 .byte 0
288 .byte 1
289 .byte 0
290 .byte 9
291 .byte 64
292 .byte 9
293 .byte 64
294 .byte 9
295 .byte 64
296 .byte 9
297 .byte 64
298 .byte 1
299 .byte 0
300 .byte 1
301 .byte 0
302 .byte 1
303 .byte 0
304 .byte 1
305 .byte 0
306 .byte 1
307 .byte 0
308 .byte 9
309 .byte 32
310 .byte 9
311 .byte 32
312 .byte 9
313 .byte 32
314 .byte 9
315 .byte 32
316 .byte 9
317 .byte 64
318 .byte 9
319 .byte 64
320 .byte 1
321 .byte 0
322 .byte 1
323 .byte 0
324 .byte 1
325 .byte 0
326 .byte 1
327 .byte 0
328 .byte 1
329 .byte 0
330 .byte 1
331 .byte 0
332 .byte 1
333 .byte 0
334 .byte 1
335 .byte 0
336 .byte 1
337 .byte 0
338 .byte 1
339 .byte 0
340 .byte 1
341 .byte 0
342 .byte 1
343 .byte 0
344 .byte 1
345 .byte 0
346 .byte 1
347 .byte 0
348 .byte 1
349 .byte 0
350 .byte 1
351 .byte 0
352 .byte 1
353 .byte 0
354 .byte 1
355 .byte 0
356 .byte 1
357 .byte 0
358 .byte 1
359 .byte 0
360 .byte 1
361 .byte 0
362 .byte 1
363 .byte 0
364 .byte 1
365 .byte 0
366 .byte 1
367 .byte 0
368 .byte 1
369 .byte 0
370 .byte 1
371 .byte 0
372 .byte 1
373 .byte 0
374 .byte 1
375 .byte 0
376 .byte 1
377 .byte 0
378 .byte 1
379 .byte 0
380 .byte 1
381 .byte 0
382 .byte 1
383 .byte 0
384 .byte 1
385 .byte 0
386 .byte 1
387 .byte 0
388 .byte 1
389 .byte 0
390 .byte 1
391 .byte 0
392 .byte 1
393 .byte 0
394 .byte 1
395 .byte 0
396 .byte 1
397 .byte 0
398 .byte 1
399 .byte 0
400 .byte 3
401 .byte 0
402 .byte 1
403 .byte 0
404 .byte 1
405 .byte 0
406 .byte 4
407 .byte 0
408 .byte 1
409 .byte 0
410 .byte 1
411 .byte 0
412 .byte 1
413 .byte 0
414 .byte 1
415 .byte 0
416 .byte 1
417 .byte 0
418 .byte 1
419 .byte 0
420 .byte 1
421 .byte 0
422 .byte 1
423 .byte 0
424 .byte 1
425 .byte 0
426 .byte 1
427 .byte 0
428 .byte 1
429 .byte 0
430 .byte 1
431 .byte 0
432 .byte 1
433 .byte 0
434 .byte 1
435 .byte 0
436 .byte 1
437 .byte 0
438 .byte 1
439 .byte 0
440 .byte 1
441 .byte 0
442 .byte 1
443 .byte 0
444 .byte 1
445 .byte 0
446 .byte 1
447 .byte 0
448 .byte 1
449 .byte 0
450 .byte 1
451 .byte 0
452 .byte 1
453 .byte 0
454 .byte 1
455 .byte 0
456 .byte 1
457 .byte 0
458 .byte 1
459 .byte 0
460 .byte 1
461 .byte 0
462 .byte 1
463 .byte 0
464 .byte 1
465 .byte 0
466 .byte 1
467 .byte 0
468 .byte 1
469 .byte 0
470 .byte 1
471 .byte 0
472 .byte 1
473 .byte 0
474 .byte 1
475 .byte 0
476 .byte 1
477 .byte 0
478 .byte 1
479 .byte 0
480 .byte 1
481 .byte 0
482 .byte 1
483 .byte 0
484 .byte 1
485 .byte 0
486 .byte 1
487 .byte 0
488 .byte 1
489 .byte 0
490 .byte 1
491 .byte 0
492 .byte 1
493 .byte 0
494 .byte 1
495 .byte 0
496 .byte 1
497 .byte 0
498 .byte 1
499 .byte 0
500 .byte 1
501 .byte 0
502 .byte 1
503 .byte 0
504 .byte 1
505 .byte 0
506 .byte 1
507 .byte 0
508 .byte 1
509 .byte 0
510 .byte 1
511 .byte 0
512 .byte 1
513 .byte 0
514 .byte 1
515 .byte 0
516 .byte 1
517 .byte 0
518 .byte 1
519 .byte 0
520 .byte 1
521 .byte 0
522 .byte 1
523 .byte 0
524 .byte 1
525 .byte 0
526 .byte 1
527 .byte 0
528 .byte 1
529 .byte 0
530 .byte 1
531 .byte 0
532 .byte 1
533 .byte 0
534 .byte 1
535 .byte 0
536 .byte 1
537 .byte 0
538 .byte 1
539 .byte 0
540 .byte 1
541 .byte 0
542 .byte 1
543 .byte 0
544 .byte 1
545 .byte 0
546 .byte 1
547 .byte 0
548 .byte 1
549 .byte 0
550 .byte 1
551 .byte 0
552 .byte 1
553 .byte 0
554 .byte 1
555 .byte 0
556 .byte 1
557 .byte 0
558 .byte 1
559 .byte 0
560 .text
561 .align 4
562 .globl freebl_cpuid
563 .type freebl_cpuid, @function
564 freebl_cpuid:
565 pushl %ebp
566 pushl %edi
567 pushl %esi
568 subl $8, %esp
569 movl %edx, %ebp
570 /APP
571 pushl %ebx
572 cpuid
573 mov %ebx,%esi
574 popl %ebx
575
576 /NO_APP
577 movl %eax, (%ebp)
578 movl 24(%esp), %eax
579 movl %esi, (%eax)
580 movl 28(%esp), %eax
581 movl %ecx, (%eax)
582 movl 32(%esp), %eax
583 movl %edx, (%eax)
584 addl $8, %esp
585 popl %esi
586 popl %edi
587 popl %ebp
588 ret
589 .size freebl_cpuid, .-freebl_cpuid
590 .align 4
591 .type changeFlag, @function
592 changeFlag:
593 /APP
594 pushfl
595 popl %edx
596 movl %edx,%ecx
597 xorl %eax,%edx
598 pushl %edx
599 popfl
600 pushfl
601 popl %edx
602 pushl %ecx
603 popfl
604
605 /NO_APP
606 xorl %ecx, %edx
607 movl %edx, %eax
608 ret
609 .size changeFlag, .-changeFlag
610 .align 4
611 .type getIntelCacheEntryLineSize, @function
612 getIntelCacheEntryLineSize:
613 pushl %edi
614 pushl %esi
615 pushl %ebx
616 call .L17
617 .L17:
618 popl %ebx
619 addl $_GLOBAL_OFFSET_TABLE_+[.-.L17], %ebx
620 movzbl CacheMap@GOTOFF(%ebx,%eax,2), %ecx
621 movb 1+CacheMap@GOTOFF(%ebx,%eax,2), %al
622 testb %al, %al
623 movl 16(%esp), %edi
624 je .L3
625 cmpl $6, %ecx
626 je .L6
627 cmpl $8, %ecx
628 je .L6
629 movl (%edx), %esi
630 cmpl $1, %esi
631 jg .L15
632 .L8:
633 cmpl $2, %esi
634 jle .L3
635 cmpl $12, %ecx
636 je .L12
637 cmpl $14, %ecx
638 je .L12
639 .align 4
640 .L3:
641 popl %ebx
642 popl %esi
643 popl %edi
644 ret
645 .align 4
646 .L6:
647 movzbl %al, %eax
648 movl $1, (%edx)
649 movl %eax, (%edi)
650 .L16:
651 popl %ebx
652 popl %esi
653 popl %edi
654 ret
655 .align 4
656 .L15:
657 cmpl $9, %ecx
658 je .L9
659 cmpl $11, %ecx
660 jne .L8
661 .L9:
662 movzbl %al, %eax
663 movl $2, (%edx)
664 movl %eax, (%edi)
665 jmp .L16
666 .L12:
667 movzbl %al, %eax
668 movl $3, (%edx)
669 movl %eax, (%edi)
670 jmp .L16
671 .size getIntelCacheEntryLineSize, .-getIntelCacheEntryLineSize
672 .align 4
673 .type getIntelRegisterCacheLineSize, @function
674 getIntelRegisterCacheLineSize:
675 pushl %ebp
676 movl %esp, %ebp
677 pushl %edi
678 pushl %esi
679 pushl %ecx
680 movl 8(%ebp), %edi
681 movl %eax, %esi
682 movl %edx, -12(%ebp)
683 shrl $24, %eax
684 pushl %edi
685 call getIntelCacheEntryLineSize
686 movl %esi, %eax
687 pushl %edi
688 shrl $16, %eax
689 movl -12(%ebp), %edx
690 andl $255, %eax
691 call getIntelCacheEntryLineSize
692 pushl %edi
693 movl %esi, %edx
694 movzbl %dh, %eax
695 movl -12(%ebp), %edx
696 call getIntelCacheEntryLineSize
697 andl $255, %esi
698 movl %edi, 8(%ebp)
699 movl -12(%ebp), %edx
700 addl $12, %esp
701 leal -8(%ebp), %esp
702 movl %esi, %eax
703 popl %esi
704 popl %edi
705 leave
706 jmp getIntelCacheEntryLineSize
707 .size getIntelRegisterCacheLineSize, .-getIntelRegisterCacheLineSize
708 .align 4
709 .globl s_mpi_getProcessorLineSize
710 .type s_mpi_getProcessorLineSize, @function
711 s_mpi_getProcessorLineSize:
712 pushl %ebp
713 movl %esp, %ebp
714 pushl %edi
715 pushl %esi
716 pushl %ebx
717 subl $188, %esp
718 call .L52
719 .L52:
720 popl %ebx
721 addl $_GLOBAL_OFFSET_TABLE_+[.-.L52], %ebx
722 movl $9, -168(%ebp)
723 movl $262144, %eax
724 call changeFlag
725 xorl %edx, %edx
726 testl %eax, %eax
727 jne .L50
728 .L19:
729 leal -12(%ebp), %esp
730 popl %ebx
731 popl %esi
732 movl %edx, %eax
733 popl %edi
734 leave
735 ret
736 .align 4
737 .L50:
738 movl $2097152, %eax
739 call changeFlag
740 testl %eax, %eax
741 movl $32, %edx
742 je .L19
743 leal -108(%ebp), %eax
744 pushl %eax
745 leal -112(%ebp), %eax
746 pushl %eax
747 leal -116(%ebp), %eax
748 pushl %eax
749 leal -120(%ebp), %edx
750 xorl %eax, %eax
751 call freebl_cpuid
752 movl -120(%ebp), %eax
753 movl %eax, -164(%ebp)
754 movl -116(%ebp), %eax
755 movl %eax, -104(%ebp)
756 movl -108(%ebp), %eax
757 movl %eax, -100(%ebp)
758 movl -112(%ebp), %eax
759 movl %eax, -96(%ebp)
760 movb $0, -92(%ebp)
761 xorl %esi, %esi
762 addl $12, %esp
763 leal -104(%ebp), %edi
764 .align 4
765 .L28:
766 subl $8, %esp
767 pushl %edi
768 pushl manMap@GOTOFF(%ebx,%esi,4)
769 call strcmp@PLT
770 addl $16, %esp
771 testl %eax, %eax
772 jne .L26
773 movl %esi, -168(%ebp)
774 .L26:
775 incl %esi
776 cmpl $9, %esi
777 jle .L28
778 movl -168(%ebp), %eax
779 testl %eax, %eax
780 jne .L29
781 xorl %eax, %eax
782 cmpl $1, -164(%ebp)
783 movl $4, -144(%ebp)
784 movl $0, -140(%ebp)
785 jle .L41
786 leal -124(%ebp), %edx
787 movl %edx, -188(%ebp)
788 leal -128(%ebp), %eax
789 pushl %edx
790 movl %eax, -184(%ebp)
791 leal -132(%ebp), %edx
792 pushl %eax
793 movl %edx, -180(%ebp)
794 movl $2, %eax
795 pushl %edx
796 leal -136(%ebp), %edx
797 call freebl_cpuid
798 movl -136(%ebp), %eax
799 movl %eax, %edi
800 andl $15, %edi
801 xorl %esi, %esi
802 addl $12, %esp
803 leal -140(%ebp), %edx
804 cmpl %edi, %esi
805 movl %edx, -176(%ebp)
806 jl .L40
807 jmp .L48
808 .align 4
809 .L49:
810 movl -136(%ebp), %eax
811 .L40:
812 testl %eax, %eax
813 js .L35
814 xorb %al, %al
815 pushl -176(%ebp)
816 leal -144(%ebp), %edx
817 call getIntelRegisterCacheLineSize
818 popl %eax
819 .L35:
820 movl -132(%ebp), %eax
821 testl %eax, %eax
822 js .L36
823 pushl -176(%ebp)
824 leal -144(%ebp), %edx
825 call getIntelRegisterCacheLineSize
826 popl %eax
827 .L36:
828 movl -128(%ebp), %eax
829 testl %eax, %eax
830 js .L37
831 pushl -176(%ebp)
832 leal -144(%ebp), %edx
833 call getIntelRegisterCacheLineSize
834 popl %eax
835 .L37:
836 movl -124(%ebp), %eax
837 testl %eax, %eax
838 js .L38
839 pushl -176(%ebp)
840 leal -144(%ebp), %edx
841 call getIntelRegisterCacheLineSize
842 popl %eax
843 .L38:
844 incl %esi
845 cmpl %edi, %esi
846 je .L34
847 pushl -188(%ebp)
848 pushl -184(%ebp)
849 pushl -180(%ebp)
850 leal -136(%ebp), %edx
851 movl $2, %eax
852 call freebl_cpuid
853 addl $12, %esp
854 .L34:
855 cmpl %edi, %esi
856 jl .L49
857 .L48:
858 movl -140(%ebp), %eax
859 .L41:
860 testl %eax, %eax
861 jne .L44
862 movb $32, %al
863 .L44:
864 leal -12(%ebp), %esp
865 popl %ebx
866 popl %esi
867 movl %eax, %edx
868 movl %edx, %eax
869 popl %edi
870 leave
871 ret
872 .L29:
873 leal -148(%ebp), %eax
874 movl %eax, -192(%ebp)
875 movl $0, -172(%ebp)
876 leal -152(%ebp), %edi
877 pushl %eax
878 pushl %edi
879 leal -156(%ebp), %esi
880 pushl %esi
881 leal -160(%ebp), %edx
882 movl $-2147483648, %eax
883 call freebl_cpuid
884 addl $12, %esp
885 cmpl $-2147483644, -160(%ebp)
886 ja .L51
887 .L42:
888 movl -172(%ebp), %eax
889 jmp .L41
890 .L51:
891 pushl -192(%ebp)
892 pushl %edi
893 pushl %esi
894 leal -160(%ebp), %edx
895 movl $-2147483643, %eax
896 call freebl_cpuid
897 movzbl -152(%ebp), %edx
898 addl $12, %esp
899 movl %edx, -172(%ebp)
900 jmp .L42
901 .size s_mpi_getProcessorLineSize, .-s_mpi_getProcessorLineSize

mercurial