/ 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,
40
manMap:
.long .LC0
.long .LC1
.long .LC2
.long .LC3
.long .LC4
.long .LC5
.long .LC6
.long .LC7
.long .LC8
.long .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 4
.globl freebl_cpuid
.type freebl_cpuid, @function
freebl_cpuid:
pushl %ebp
pushl %edi
pushl %esi
subl $
8 , %esp
movl %edx, %ebp
/APP
pushl %ebx
xorl %ecx, %ecx
cpuid
mov %ebx,%esi
popl %ebx
/NO_APP
movl %eax, (%ebp)
movl
24 (%esp), %eax
movl %esi, (%eax)
movl
28 (%esp), %eax
movl %ecx, (%eax)
movl
32 (%esp), %eax
movl %edx, (%eax)
addl $
8 , %esp
popl %esi
popl %edi
popl %ebp
ret
.
size freebl_cpuid, .-freebl_cpuid
.
align 4
.type changeFlag, @function
changeFlag:
/APP
pushfl
popl %edx
movl %edx,%ecx
xorl %eax,%edx
pushl %edx
popfl
pushfl
popl %edx
pushl %ecx
popfl
/NO_APP
xorl %ecx, %edx
movl %edx, %eax
ret
.
size changeFlag, .-changeFlag
.
align 4
.type getIntelCacheEntryLineSize, @function
getIntelCacheEntryLineSize:
pushl %edi
pushl %esi
pushl %ebx
call .L17
.L17:
popl %ebx
addl $_GLOBAL_OFFSET_TABLE_+[.-.L17], %ebx
movzbl CacheMap@GOTOFF(%ebx,%eax,
2 ), %ecx
movb
1 +CacheMap@GOTOFF(%ebx,%eax,
2 ), %al
testb %al, %al
movl
16 (%esp), %edi
je .L3
cmpl $
6 , %ecx
je .L6
cmpl $
8 , %ecx
je .L6
movl (%edx), %esi
cmpl $
1 , %esi
jg .L15
.L8:
cmpl $
2 , %esi
jle .L3
cmpl $
12 , %ecx
je .L12
cmpl $
14 , %ecx
je .L12
.
align 4
.L3:
popl %ebx
popl %esi
popl %edi
ret
.
align 4
.L6:
movzbl %al, %eax
movl $
1 , (%edx)
movl %eax, (%edi)
.L16:
popl %ebx
popl %esi
popl %edi
ret
.
align 4
.L15:
cmpl $
9 , %ecx
je .L9
cmpl $
11 , %ecx
jne .L8
.L9:
movzbl %al, %eax
movl $
2 , (%edx)
movl %eax, (%edi)
jmp .L16
.L12:
movzbl %al, %eax
movl $
3 , (%edx)
movl %eax, (%edi)
jmp .L16
.
size getIntelCacheEntryLineSize, .-getIntelCacheEntryLineSize
.
align 4
.type getIntelRegisterCacheLineSize, @function
getIntelRegisterCacheLineSize:
pushl %ebp
movl %esp, %ebp
pushl %edi
pushl %esi
pushl %ecx
movl
8 (%ebp), %edi
movl %eax, %esi
movl %edx, -
12 (%ebp)
shrl $
24 , %eax
pushl %edi
call getIntelCacheEntryLineSize
movl %esi, %eax
pushl %edi
shrl $
16 , %eax
movl -
12 (%ebp), %edx
andl $
255 , %eax
call getIntelCacheEntryLineSize
pushl %edi
movl %esi, %edx
movzbl %dh, %eax
movl -
12 (%ebp), %edx
call getIntelCacheEntryLineSize
andl $
255 , %esi
movl %edi,
8 (%ebp)
movl -
12 (%ebp), %edx
addl $
12 , %esp
leal -
8 (%ebp), %esp
movl %esi, %eax
popl %esi
popl %edi
leave
jmp getIntelCacheEntryLineSize
.
size getIntelRegisterCacheLineSize, .-getIntelRegisterCacheLineSize
.
align 4
.globl s_mpi_getProcessorLineSize
.type s_mpi_getProcessorLineSize, @function
s_mpi_getProcessorLineSize:
pushl %ebp
movl %esp, %ebp
pushl %edi
pushl %esi
pushl %ebx
subl $
188 , %esp
call .L52
.L52:
popl %ebx
addl $_GLOBAL_OFFSET_TABLE_+[.-.L52], %ebx
movl $
9 , -
168 (%ebp)
movl $
262144 , %eax
call changeFlag
xorl %edx, %edx
testl %eax, %eax
jne .L50
.L19:
leal -
12 (%ebp), %esp
popl %ebx
popl %esi
movl %edx, %eax
popl %edi
leave
ret
.
align 4
.L50:
movl $
2097152 , %eax
call changeFlag
testl %eax, %eax
movl $
32 , %edx
je .L19
leal -
108 (%ebp), %eax
pushl %eax
leal -
112 (%ebp), %eax
pushl %eax
leal -
116 (%ebp), %eax
pushl %eax
leal -
120 (%ebp), %edx
xorl %eax, %eax
call freebl_cpuid
movl -
120 (%ebp), %eax
movl %eax, -
164 (%ebp)
movl -
116 (%ebp), %eax
movl %eax, -
104 (%ebp)
movl -
108 (%ebp), %eax
movl %eax, -
100 (%ebp)
movl -
112 (%ebp), %eax
movl %eax, -
96 (%ebp)
movb $
0 , -
92 (%ebp)
xorl %esi, %esi
addl $
12 , %esp
leal -
104 (%ebp), %edi
.
align 4
.L28:
subl $
8 , %esp
pushl %edi
pushl manMap@GOTOFF(%ebx,%esi,
4 )
call strcmp@PLT
addl $
16 , %esp
testl %eax, %eax
jne .L26
movl %esi, -
168 (%ebp)
.L26:
incl %esi
cmpl $
9 , %esi
jle .L28
movl -
168 (%ebp), %eax
testl %eax, %eax
jne .L29
xorl %eax, %eax
cmpl $
1 , -
164 (%ebp)
movl $
4 , -
144 (%ebp)
movl $
0 , -
140 (%ebp)
jle .L41
leal -
124 (%ebp), %edx
movl %edx, -
188 (%ebp)
leal -
128 (%ebp), %eax
pushl %edx
movl %eax, -
184 (%ebp)
leal -
132 (%ebp), %edx
pushl %eax
movl %edx, -
180 (%ebp)
movl $
2 , %eax
pushl %edx
leal -
136 (%ebp), %edx
call freebl_cpuid
movl -
136 (%ebp), %eax
movl %eax, %edi
andl $
15 , %edi
xorl %esi, %esi
addl $
12 , %esp
leal -
140 (%ebp), %edx
cmpl %edi, %esi
movl %edx, -
176 (%ebp)
jl .L40
jmp .L48
.
align 4
.L49:
movl -
136 (%ebp), %eax
.L40:
testl %eax, %eax
js .L35
xorb %al, %al
pushl -
176 (%ebp)
leal -
144 (%ebp), %edx
call getIntelRegisterCacheLineSize
popl %eax
.L35:
movl -
132 (%ebp), %eax
testl %eax, %eax
js .L36
pushl -
176 (%ebp)
leal -
144 (%ebp), %edx
call getIntelRegisterCacheLineSize
popl %eax
.L36:
movl -
128 (%ebp), %eax
testl %eax, %eax
js .L37
pushl -
176 (%ebp)
leal -
144 (%ebp), %edx
call getIntelRegisterCacheLineSize
popl %eax
.L37:
movl -
124 (%ebp), %eax
testl %eax, %eax
js .L38
pushl -
176 (%ebp)
leal -
144 (%ebp), %edx
call getIntelRegisterCacheLineSize
popl %eax
.L38:
incl %esi
cmpl %edi, %esi
je .L34
pushl -
188 (%ebp)
pushl -
184 (%ebp)
pushl -
180 (%ebp)
leal -
136 (%ebp), %edx
movl $
2 , %eax
call freebl_cpuid
addl $
12 , %esp
.L34:
cmpl %edi, %esi
jl .L49
.L48:
movl -
140 (%ebp), %eax
.L41:
testl %eax, %eax
jne .L44
movb $
32 , %al
.L44:
leal -
12 (%ebp), %esp
popl %ebx
popl %esi
movl %eax, %edx
movl %edx, %eax
popl %edi
leave
ret
.L29:
leal -
148 (%ebp), %eax
movl %eax, -
192 (%ebp)
movl $
0 , -
172 (%ebp)
leal -
152 (%ebp), %edi
pushl %eax
pushl %edi
leal -
156 (%ebp), %esi
pushl %esi
leal -
160 (%ebp), %edx
movl $-
2147483648 , %eax
call freebl_cpuid
addl $
12 , %esp
cmpl $-
2147483644 , -
160 (%ebp)
ja .L51
.L42:
movl -
172 (%ebp), %eax
jmp .L41
.L51:
pushl -
192 (%ebp)
pushl %edi
pushl %esi
leal -
160 (%ebp), %edx
movl $-
2147483643 , %eax
call freebl_cpuid
movzbl -
152 (%ebp), %edx
addl $
12 , %esp
movl %edx, -
172 (%ebp)
jmp .L42
.
size s_mpi_getProcessorLineSize, .-s_mpi_getProcessorLineSize
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Dauer der Verarbeitung: 0.5 Sekunden
¤
*© Formatika GbR, Deutschland