KiSelectIdealProcessor

UINT64 __stdcall KiSelectIdealProcessor(_KNODE *Node, UINT64 Seed, _GROUP_AFFINITY *Affinity){
  int Lowest_low; 
  int Highest_low; 
  unsigned __int64 Mask; 
  int v8; 
  __int64 v9; 
  unsigned __int64 StrideMask; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  unsigned __int64 i; 
  __int64 j; 
  unsigned __int64 v15; 
  unsigned __int64 v17; 
  unsigned __int64 v18; 
  unsigned __int64 v19; 
  __int64 v20; 
  unsigned __int64 v21; 

  Lowest_low = LOWORD(Node->Lowest);
  Highest_low = LOWORD(Node->Highest);
  if( (_WORD)Lowest_low == (_WORD)Highest_low )
    return(unsigned __int16)Lowest_low;
  Mask = Node->Affinity.Mask;
  v8 = KiProcessorIndexToNumberMappingTable[(unsigned __int16)(Lowest_low
                                                             + ((unsigned __int16)Seed - Lowest_low)
                                                             % (Highest_low - Lowest_low + 1))];
  v9 = 1i64 << (v8 & 0x3F);
  if( (Mask & v9) == 0 )
  {
    _BitScanForward64(&v21, __ROR8__(Mask, v8 & 0x3F));
    v9 = 1i64 << (((v8 & 0x3F) + v21) & 0x3F);
  }
  StrideMask = Node->StrideMask;
  v11 = StrideMask;
  v12 = ~Mask;
  for( i = StrideMask & Mask; (v9 & i) == 0; i = v11 & ~v12 )
  {
    v12 |= v11;
    v11 *= 2i64;
  }
  for( j = ~(v9 | (v9 - 1)) & i; (j & (unsigned __int64)Affinity) == 0; j = v11 & ~v12 )
  {
    v17 = v11 | v12;
    v18 = ~(v11 | v12);
    v12 = ~Mask;
    v19 = Mask & v18;
    if( v19 )
      v12 = v17;
    v20 = 2 * v11;
    v11 = StrideMask;
    if( v19 )
      v11 = v20;
  }
  _BitScanForward64(&v15, (unsigned __int64)Affinity & j);
  return LOWORD(KiProcessorNumberToIndexMappingTable[(unsigned int)v15 + (v8 & 0xFFFFFFC0)]);
}

Referenced by:

KeSelectIdealProcessor