1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-10-24 13:33:08 +03:00

* sysdeps/x86_64/cacheinfo.c (handle_amd): Fix computation of

associativity for fully-associative caches.
This commit is contained in:
Ulrich Drepper
2007-08-25 17:24:23 +00:00
parent 80e7d6a6d3
commit 76fca9f14a
2 changed files with 9 additions and 8 deletions

View File

@@ -1,5 +1,8 @@
2007-08-25 Ulrich Drepper <drepper@redhat.com> 2007-08-25 Ulrich Drepper <drepper@redhat.com>
* sysdeps/x86_64/cacheinfo.c (handle_amd): Fix computation of
associativity for fully-associative caches.
* sysdeps/x86_64/cacheinfo.c (handle_amd): Handle L3 cache * sysdeps/x86_64/cacheinfo.c (handle_amd): Handle L3 cache
requests. Fill on more associativity values for L2. requests. Fill on more associativity values for L2.
Patch mostly by Evandro Menezes. Patch mostly by Evandro Menezes.

View File

@@ -296,14 +296,13 @@ handle_amd (int name)
return (ecx & 0xf000) == 0 ? 0 : (ecx >> 6) & 0x3fffc00; return (ecx & 0xf000) == 0 ? 0 : (ecx >> 6) & 0x3fffc00;
case _SC_LEVEL2_CACHE_ASSOC: case _SC_LEVEL2_CACHE_ASSOC:
ecx >>= 12; switch ((ecx >> 12) & 0xf)
switch (ecx & 0xf)
{ {
case 0: case 0:
case 1: case 1:
case 2: case 2:
case 4: case 4:
return ecx & 0xf; return (ecx >> 12) & 0xf;
case 6: case 6:
return 8; return 8;
case 8: case 8:
@@ -319,7 +318,7 @@ handle_amd (int name)
case 14: case 14:
return 128; return 128;
case 15: case 15:
return (ecx << 6) & 0x3fffc00; return ((ecx >> 6) & 0x3fffc00) / (ecx & 0xff);
default: default:
return 0; return 0;
} }
@@ -332,14 +331,13 @@ handle_amd (int name)
return (edx & 0xf000) == 0 ? 0 : (edx & 0x3ffc0000) << 1; return (edx & 0xf000) == 0 ? 0 : (edx & 0x3ffc0000) << 1;
case _SC_LEVEL3_CACHE_ASSOC: case _SC_LEVEL3_CACHE_ASSOC:
edx >>= 12; switch ((edx >> 12) & 0xf)
switch (edx & 0xf)
{ {
case 0: case 0:
case 1: case 1:
case 2: case 2:
case 4: case 4:
return edx & 0xf; return (edx >> 12) & 0xf;
case 6: case 6:
return 8; return 8;
case 8: case 8:
@@ -355,7 +353,7 @@ handle_amd (int name)
case 14: case 14:
return 128; return 128;
case 15: case 15:
return (edx & 0x3ffc0) << 13; return ((edx & 0x3ffc0000) << 1) / (edx & 0xff);
default: default:
return 0; return 0;
} }