KiGenerateHeteroSets

VOID __fastcall KiGenerateHeteroSets(
        _KNODE *Node,
        UINT64 AffinityMask,
        _KHETERO_CPU_POLICY Policy,
        UINT64 *IdealSetOut,
        UINT64 *PreferredSetOut,
        UINT64 *AvailableSetOut){
  __int64 v6; 
  UINT64 v7; 
  UINT64 v8; 
  UINT64 v9; 

  v6 = Policy;
  v7 = AffinityMask & Node->HeteroSets[v6].IdealMask;
  v8 = AffinityMask & Node->HeteroSets[v6].PreferredMask;
  v9 = AffinityMask & Node->HeteroSets[v6].AvailableMask;
  if( v9 )
  {
    if( v8 )
    {
      AffinityMask &= Node->HeteroSets[v6].IdealMask;
      if( !v7 )
        AffinityMask = v8;
    }
    else
    {
      v8 = AffinityMask & Node->HeteroSets[v6].AvailableMask;
      AffinityMask = v8;
    }
  }
  else
  {
    v9 = AffinityMask;
    v8 = AffinityMask;
  }
  *IdealSetOut = AffinityMask;
  *PreferredSetOut = v8;
  *AvailableSetOut = v9;
}

Referenced by:

KeClockInterruptNotify
KiCheckPreferredHeteroProcessor
KiHeteroChooseTargetProcessor
KiSetHeteroPolicyThread