HvlpDiscoverTopologyIntel

VOID __stdcall HvlpDiscoverTopologyIntel(UINT64 LpIndex, UINT64 ApicId, UINT64 *PackageId, UINT64 *CoreId){
  unsigned int v6; 
  unsigned int v7; 
  unsigned int v8; 
  unsigned int v9; 
  unsigned __int8 v10; 
  unsigned int v11; 
  unsigned __int8 v12; 
  UINT64 a4[2]; 
  *(_DWORD *)CoreId = ApicId;
  *(_DWORD *)PackageId = ApicId;
  v6 = LpIndex;
  *(_OWORD *)a4 = 0i64;
  HvlpLpCpuid(LpIndex, 0i64, 0i64, a4);
  v7 = a4[0];
  if( LODWORD(a4[0]) >= 0xB && (HvlpLpCpuid(v6, 11i64, 0i64, a4), HIDWORD(a4[0])) )
  {
    v8 = 0;
    do
    {
      HvlpLpCpuid(v6, 11i64, v8++, a4);
      if( LODWORD(a4[1]) >> 8 == 1 )
      {
        *(_DWORD *)CoreId >>= a4[0] & 0x1F;
      }
      else if( LODWORD(a4[1]) >> 8 == 2 )
      {
        *(_DWORD *)PackageId >>= a4[0] & 0x1F;
      }
    }
    while( WORD2(a4[0]) );
  }
  else
  {
    if( v7 < 4 )
    {
      v10 = 1;
    }
    else
    {
      HvlpLpCpuid(v6, 4i64, 0i64, a4);
      _BitScanReverse(&v9, 2 * (LODWORD(a4[0]) >> 26) + 1);
      v10 = 1 << v9;
    }
    HvlpLpCpuid(v6, 1i64, 0i64, a4);
    if( (a4[1] & 0x1000000000000000i64) != 0 )
    {
      _BitScanReverse(&v11, 2 * BYTE6(a4[0]) - 1);
      v12 = 1 << v11;
    }
    else
    {
      v12 = v10;
    }
    *(_DWORD *)CoreId /= (unsigned int)(unsigned __int8)(v12 / v10);
    *(_DWORD *)PackageId /= (unsigned int)v12;
  }
}

Referenced by:

HvlpDiscoverTopologyWorker