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;
UINT64 a4[2];
v6 = ApicId;
v7 = 1;
*(_OWORD *)a4 = 0i64;
v8 = 1;
v9 = LpIndex;
HvlpLpCpuid(LpIndex, 0x80000000i64, 0i64, a4);
v10 = a4[0];
if( LODWORD(a4[0]) >= 0x80000008 )
{
HvlpLpCpuid(v9, 2147483656i64, 0i64, a4);
LOWORD(v11) = LOWORD(a4[1]) >> 12;
if( !(LOWORD(a4[1]) >> 12) )
_BitScanReverse((unsigned int *)&v11, 2 * LOBYTE(a4[1]) + 1);
v8 = 1 << v11;
if( v10 >= 0x8000001E )
{
HvlpLpCpuid(v9, 2147483649i64, 0i64, a4);
if( (a4[1] & 0x400000) != 0 )
{
HvlpLpCpuid(v9, 2147483678i64, 0i64, a4);
v7 = BYTE5(a4[0]) + 1;
v8 /= v7;
}
}
}
*(_DWORD *)PackageId = v6 / (v8 * v7);
*(_DWORD *)CoreId = v6 / v7;
}Referenced by:
HvlpDiscoverTopologyWorker