HvlpDiscoverTopologyAmd
VOID __stdcall HvlpDiscoverTopologyAmd(UINT64 LpIndex, UINT64 ApicId, UINT64 *PackageId, UINT64 *CoreId){
unsigned int v6;
unsigned int v7;
unsigned int v8;
unsigned int v9;
unsigned int v10;
int v11;
_CPU_INFO CpuInfo;
v6 = ApicId;
v7 = 1;
CpuInfo = 0i64;
v8 = 1;
v9 = LpIndex;
HvlpLpCpuid(LpIndex, 0x80000000ui64, 0i64, &CpuInfo);
v10 = CpuInfo.AsUINT32[0];
if( CpuInfo.AsUINT32[0] >= 0x80000008 )
{
HvlpLpCpuid(v9, 0x80000008ui64, 0i64, &CpuInfo);
LOWORD(v11) = LOWORD(CpuInfo._Ecx) >> 12;
if( !(LOWORD(CpuInfo._Ecx) >> 12) )
_BitScanReverse((unsigned int *)&v11, 2 * LOBYTE(CpuInfo._Ecx) + 1);
v8 = 1 << v11;
if( v10 >= 0x8000001E )
{
HvlpLpCpuid(v9, 0x80000001ui64, 0i64, &CpuInfo);
if( (CpuInfo.AsUINT32[2] & 0x400000) != 0 )
{
HvlpLpCpuid(v9, 0x8000001Eui64, 0i64, &CpuInfo);
v7 = BYTE1(CpuInfo._Ebx) + 1;
v8 /= v7;
}
}
}
*(_DWORD *)PackageId = v6 / (v8 * v7);
*(_DWORD *)CoreId = v6 / v7;
}Referenced by:
HvlpDiscoverTopologyWorker