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