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; 
  _CPU_INFO CpuInfo; 

  *(_DWORD *)CoreId = ApicId;
  *(_DWORD *)PackageId = ApicId;
  v6 = LpIndex;
  CpuInfo = 0i64;
  HvlpLpCpuid(LpIndex, 0i64, 0i64, &CpuInfo);
  v7 = CpuInfo.AsUINT32[0];
  if( CpuInfo.AsUINT32[0] >= 0xB && (HvlpLpCpuid(v6, 0xBui64, 0i64, &CpuInfo), CpuInfo.AsUINT32[1]) )
  {
    v8 = 0;
    do
    {
      HvlpLpCpuid(v6, 0xBui64, v8++, &CpuInfo);
      if( CpuInfo.AsUINT32[2] >> 8 == 1 )
      {
        *(_DWORD *)CoreId >>= CpuInfo.AsUINT32[0] & 0x1F;
      }
      else if( CpuInfo.AsUINT32[2] >> 8 == 2 )
      {
        *(_DWORD *)PackageId >>= CpuInfo.AsUINT32[0] & 0x1F;
      }
    }
    while( LOWORD(CpuInfo._Ebx) );
  }
  else
  {
    if( v7 < 4 )
    {
      v10 = 1;
    }
    else
    {
      HvlpLpCpuid(v6, 4ui64, 0i64, &CpuInfo);
      _BitScanReverse(&v9, 2 * (CpuInfo.AsUINT32[0] >> 26) + 1);
      v10 = 1 << v9;
    }
    HvlpLpCpuid(v6, 1ui64, 0i64, &CpuInfo);
    if( (CpuInfo.AsUINT32[3] & 0x10000000) != 0 )
    {
      _BitScanReverse(&v11, 2 * BYTE2(CpuInfo._Ebx) - 1);
      v12 = 1 << v11;
    }
    else
    {
      v12 = v10;
    }
    *(_DWORD *)CoreId /= (unsigned int)(unsigned __int8)(v12 / v10);
    *(_DWORD *)PackageId /= (unsigned int)v12;
  }
}

Referenced by:

HvlpDiscoverTopologyWorker