PpmHeteroComputeRelativePerformance

VOID __stdcall PpmHeteroComputeRelativePerformance(){
  INT64 *v0; 
  unsigned __int64 v1; 
  unsigned __int64 v2; 
  char v3; 
  char v4; 
  unsigned int v5; 
  INT64 v6; 
  unsigned int v7; 
  unsigned __int64 v8; 
  __int64 v9; 
  unsigned __int64 v10; 
  unsigned int i; 
  __int64 v12; 
  int v13; 
  char v14; 
  unsigned __int64 v15; 
  INT64 *v16; 
  unsigned __int64 v17; 
  unsigned __int64 v18; 
  INT64 j; 
  int v20; 
  unsigned __int64 v21; 
  INT64 v22; 
  unsigned __int64 v23; 
  unsigned __int64 v24; 
  INT64 k; 
  if( !(unsigned int)KeIsEmptyAffinityEx(&PpmCheckRegistered) )
  {
    if( (unsigned int)KeIsEqualAffinityEx(&PpmPerfStatesRegistered.Count, (unsigned __int16 *)&PpmCheckRegistered) )
    {
      if( PpmPerfDomainCount != 1 )
      {
        v0 = (INT64 *)PpmPerfDomainHead;
        v1 = 0i64;
        if( (INT64 *)PpmPerfDomainHead != &PpmPerfDomainHead )
        {
          do
          {
            v2 = v1;
            v1 = v0[43];
            v0 = (INT64 *)*v0;
            if( v2 > v1 )
              v1 = v2;
          }
          while( v0 != &PpmPerfDomainHead );
          if( v1 )
          {
            v3 = 0;
            v4 = 0;
            if( v1 >= 0x7FFFFFFFFFFFi64 )
            {
              _BitScanReverse(&v5, HIDWORD(v1) + 0xFFFF);
              v3 = v5 - 14;
              v4 = v3;
            }
            v6 = PpmPerfDomainHead;
            v7 = -1;
            v8 = v1 >> v4;
            while( (INT64 *)v6 != &PpmPerfDomainHead )
            {
              v9 = *(_QWORD *)(v6 + 344) >> v3;
              *(_BYTE *)(v6 + 352) = 100 * v9 / v8;
              if( v9 == v8 )
              {
                v10 = 0x10000i64;
              }
              else
              {
                v10 = ((v9 << 16) + (v8 >> 1)) / v8;
                if( v10 <= 1 )
                  v10 = 1i64;
              }
              for( i = 0; i < *(_DWORD *)(v6 + 200); ++i )
              {
                v12 = *(_QWORD *)(136i64 * i + *(_QWORD *)(v6 + 216));
                if( v12 )
                  *(_DWORD *)(v12 + 56) = v10;
              }
              v6 = *(_QWORD *)v6;
              if( v7 >= v10 )
                v7 = v10;
            }
            v13 = PpmPerfDomainCount;
            v14 = 0;
            v15 = 0i64;
            PpmHeteroMinRelativePerformance = v7;
            while( v13 )
            {
              v16 = (INT64 *)PpmPerfDomainHead;
              v17 = -1i64;
              while( v16 != &PpmPerfDomainHead )
              {
                v18 = v16[43];
                if( v18 > v15 && v17 >= v18 )
                  v17 = v16[43];
                v16 = (INT64 *)*v16;
              }
              for( j = PpmPerfDomainHead; (INT64 *)j != &PpmPerfDomainHead; j = *(_QWORD *)j )
              {
                if( *(_QWORD *)(j + 344) == v17 )
                {
                  *(_BYTE *)(j + 205) = v14;
                  --v13;
                }
              }
              v15 = v17;
              ++v14;
            }
            v20 = PpmPerfDomainCount;
            v21 = 0i64;
            PpmHeteroNominalPerformanceClasses = v14;
            while( v20 )
            {
              v22 = PpmPerfDomainHead;
              v23 = 0xFFFFFFFFi64;
              while( (INT64 *)v22 != &PpmPerfDomainHead )
              {
                v24 = *(_QWORD *)(v22 + 344) * *(unsigned int *)(v22 + 320);
                if( v24 > v21 && v23 >= v24 )
                  v23 = *(_QWORD *)(v22 + 344) * *(unsigned int *)(v22 + 320);
                v22 = *(_QWORD *)v22;
              }
              for( k = PpmPerfDomainHead; (INT64 *)k != &PpmPerfDomainHead; k = *(_QWORD *)k )
              {
                if( *(_QWORD *)(k + 344) * *(unsigned int *)(k + 320) == v23 )
                {
                  if( *(_BYTE *)(k + 206) != (_BYTE)v13 )
                    *(_BYTE *)(k + 206) = v13;
                  --v20;
                }
              }
              v21 = v23;
              LOBYTE(v13) = v13 + 1;
            }
            PpmHeteroHighestPerformanceClasses = v13;
          }
        }
      }
    }
  }
}

Referenced by:

PopInitializeHeteroProcessors