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