/ This Source Code Form is subject to the terms of the Mozilla Public / License, v. 2.0. If a copy of the MPL was not distributed with this / file, You can obtain one at http://mozilla.org/MPL/2.0/. .file "mpcpucache.c" / .section .rodata.str1.1,"aMS",@progbits,1 .section .rodata .LC0: .string "GenuineIntel" .LC1: .string "AuthenticAMD" .LC2: .string "CyrixInstead" .LC3: .string "CentaurHauls" .LC4: .string "NexGenDriven" .LC5: .string "GenuineTMx86" .LC6: .string "RiseRiseRise" .LC7: .string "UMC UMC UMC " .LC8: .string "Sis Sis Sis " .LC9: .string "Geode by NSC" .section .data.rel.ro.local,"aw",@progbits .align 32 .type manMap, @object .size manMap, 80 manMap: .quad .LC0 .quad .LC1 .quad .LC2 .quad .LC3 .quad .LC4 .quad .LC5 .quad .LC6 .quad .LC7 .quad .LC8 .quad .LC9 .section .rodata .align 32 .type CacheMap, @object .size CacheMap, 512 CacheMap: .byte 0 .byte 0 .byte 3 .byte 0 .byte 3 .byte 0 .byte 4 .byte 0 .byte 4 .zero 1 .byte 1 .byte 0 .byte 7 .byte 32 .byte 1 .byte 0 .byte 7 .byte 32 .byte 1 .byte 0 .byte 8 .byte 32 .byte 1 .byte 0 .byte 8 .byte 32 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 12 .byte 64 .byte 12 .byte 64 .byte 1 .byte 0 .byte 12 .byte 64 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 12 .byte 64 .byte 1 .byte 0 .byte 1 .byte 0 .byte 8 .byte 64 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 7 .byte 64 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 9 .byte 64 .byte 1 .byte 0 .byte 9 .byte 64 .byte 9 .byte 64 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 9 .byte 0 .byte 9 .byte 32 .byte 9 .byte 32 .byte 9 .byte 32 .byte 9 .byte 32 .byte 9 .byte 32 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 3 .byte 0 .byte 3 .byte 0 .byte 3 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 4 .byte 0 .byte 4 .byte 0 .byte 4 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 8 .byte 64 .byte 8 .byte 64 .byte 8 .byte 64 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 5 .byte 1 .byte 5 .byte 1 .byte 5 .byte 1 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 9 .byte 64 .byte 9 .byte 64 .byte 9 .byte 64 .byte 9 .byte 64 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 9 .byte 32 .byte 9 .byte 32 .byte 9 .byte 32 .byte 9 .byte 32 .byte 9 .byte 64 .byte 9 .byte 64 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 3 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 4 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .byte 1 .byte 0 .text .align 16 .globl freebl_cpuid .type freebl_cpuid, @function freebl_cpuid: .LFB2: movq %rdx, %r10 pushq %rbx .LCFI0: movq %rcx, %r11 movq %rdi, %rax /APP cpuid /NO_APP movq %rax, (%rsi) movq %rbx, (%r10) popq %rbx movq %rcx, (%r11) movq %rdx, (%r8) ret .LFE2: .size freebl_cpuid, .-freebl_cpuid .align 16 .type getIntelCacheEntryLineSize, @function getIntelCacheEntryLineSize: .LFB3: leaq CacheMap(%rip), %r9 movq %rdx, %r10 movzbl 1(%r9,%rdi,2), %ecx movzbl (%r9,%rdi,2), %r8d testb %cl, %cl je .L2 cmpl $6, %r8d sete %dl cmpl $8, %r8d sete %al orl %edx, %eax testb $1, %al je .L4 movl $1, (%rsi) .L9: movzbl %cl, %eax movq %rax, (%r10) ret .align 16 .L4: movl (%rsi), %r11d cmpl $1, %r11d jg .L11 .L6: cmpl $2, %r11d jle .L2 cmpl $12, %r8d sete %dl cmpl $14, %r8d sete %al orl %edx, %eax testb $1, %al je .L2 movzbq 1(%r9,%rdi,2), %rax movl $3, (%rsi) movq %rax, (%r10) .align 16 .L2: rep ; ret .align 16 .L11: cmpl $9, %r8d sete %dl cmpl $11, %r8d sete %al orl %edx, %eax testb $1, %al je .L6 movl $2, (%rsi) jmp .L9 .LFE3: .size getIntelCacheEntryLineSize, .-getIntelCacheEntryLineSize .align 16 .type getIntelRegisterCacheLineSize, @function getIntelRegisterCacheLineSize: .LFB4: pushq %rbp .LCFI1: movq %rsp, %rbp .LCFI2: movq %rbx, -24(%rbp) .LCFI3: movq %rdi, %rbx shrq $24, %rdi movq %r12, -16(%rbp) .LCFI4: movq %r13, -8(%rbp) .LCFI5: andl $255, %edi subq $24, %rsp .LCFI6: movq %rsi, %r13 movq %rdx, %r12 call getIntelCacheEntryLineSize movq %rbx, %rdi movq %r12, %rdx movq %r13, %rsi shrq $16, %rdi andl $255, %edi call getIntelCacheEntryLineSize movq %rbx, %rdi movq %r12, %rdx movq %r13, %rsi shrq $8, %rdi andl $255, %ebx andl $255, %edi call getIntelCacheEntryLineSize movq %r12, %rdx movq %r13, %rsi movq %rbx, %rdi movq 8(%rsp), %r12 movq (%rsp), %rbx movq 16(%rsp), %r13 leave jmp getIntelCacheEntryLineSize .LFE4: .size getIntelRegisterCacheLineSize, .-getIntelRegisterCacheLineSize .align 16 .globl s_mpi_getProcessorLineSize .type s_mpi_getProcessorLineSize, @function s_mpi_getProcessorLineSize: .LFB7: pushq %rbp .LCFI7: xorl %edi, %edi movq %rsp, %rbp .LCFI8: pushq %r15 .LCFI9: leaq -136(%rbp), %r8 leaq -144(%rbp), %rcx leaq -152(%rbp), %rdx pushq %r14 .LCFI10: leaq -160(%rbp), %rsi leaq -128(%rbp), %r14 pushq %r13 .LCFI11: leaq manMap(%rip), %r13 pushq %r12 .LCFI12: movl $9, %r12d pushq %rbx .LCFI13: xorl %ebx, %ebx subq $200, %rsp .LCFI14: call freebl_cpuid movq -152(%rbp), %rax movq -160(%rbp), %r15 movb $0, -116(%rbp) movl %eax, -128(%rbp) movq -136(%rbp), %rax movl %eax, -124(%rbp) movq -144(%rbp), %rax movl %eax, -120(%rbp) .align 16 .L18: movslq %ebx,%rax movq %r14, %rsi movq (%r13,%rax,8), %rdi call strcmp@PLT testl %eax, %eax cmove %ebx, %r12d incl %ebx cmpl $9, %ebx jle .L18 testl %r12d, %r12d jne .L19 xorl %eax, %eax decl %r15d movl $4, -204(%rbp) movq $0, -200(%rbp) jle .L21 leaq -168(%rbp), %r8 leaq -176(%rbp), %rcx leaq -184(%rbp), %rdx leaq -192(%rbp), %rsi movl $2, %edi xorl %ebx, %ebx call freebl_cpuid movq -192(%rbp), %rdi movl %edi, %r12d andl $15, %r12d cmpl %r12d, %ebx jl .L30 jmp .L38 .align 16 .L25: movq -184(%rbp), %rdi testl $2147483648, %edi je .L40 .L26: movq -176(%rbp), %rdi testl $2147483648, %edi je .L41 .L27: movq -168(%rbp), %rdi testl $2147483648, %edi je .L42 .L28: incl %ebx cmpl %r12d, %ebx je .L24 leaq -168(%rbp), %r8 leaq -176(%rbp), %rcx leaq -184(%rbp), %rdx leaq -192(%rbp), %rsi movl $2, %edi call freebl_cpuid .L24: cmpl %r12d, %ebx jge .L38 movq -192(%rbp), %rdi .L30: testl $2147483648, %edi jne .L25 leaq -200(%rbp), %rdx leaq -204(%rbp), %rsi andl $4294967040, %edi call getIntelRegisterCacheLineSize movq -184(%rbp), %rdi testl $2147483648, %edi jne .L26 .L40: leaq -200(%rbp), %rdx leaq -204(%rbp), %rsi call getIntelRegisterCacheLineSize movq -176(%rbp), %rdi testl $2147483648, %edi jne .L27 .L41: leaq -200(%rbp), %rdx leaq -204(%rbp), %rsi call getIntelRegisterCacheLineSize movq -168(%rbp), %rdi testl $2147483648, %edi jne .L28 .L42: leaq -200(%rbp), %rdx leaq -204(%rbp), %rsi call getIntelRegisterCacheLineSize jmp .L28 .L38: movq -200(%rbp), %rax .L21: movq %rax, %rdx movl $32, %eax testq %rdx, %rdx cmoveq %rax, %rdx addq $200, %rsp popq %rbx popq %r12 popq %r13 popq %r14 popq %r15 leave movq %rdx, %rax ret .L19: leaq -216(%rbp), %r8 leaq -224(%rbp), %rcx leaq -232(%rbp), %rdx leaq -240(%rbp), %rsi movl $2147483648, %edi xorl %ebx, %ebx call freebl_cpuid movl $2147483652, %eax cmpq %rax, -240(%rbp) ja .L43 .L32: movq %rbx, %rdx movl $32, %eax testq %rdx, %rdx cmoveq %rax, %rdx addq $200, %rsp popq %rbx popq %r12 popq %r13 popq %r14 popq %r15 leave movq %rdx, %rax ret .L43: leaq -216(%rbp), %r8 leaq -224(%rbp), %rcx leaq -232(%rbp), %rdx leaq -240(%rbp), %rsi movl $2147483653, %edi call freebl_cpuid movzbq -224(%rbp), %rbx jmp .L32 .LFE7: .size s_mpi_getProcessorLineSize, .-s_mpi_getProcessorLineSize