PpmParkCalculateUnparkCount
UINT8 __stdcall PpmParkCalculateUnparkCount(){
__int64 v1;
unsigned __int8 v2;
unsigned int v3;
unsigned int v4;
unsigned __int16 v5;
__int64 v6;
unsigned __int8 v7;
unsigned int v8;
__int64 v9;
unsigned int v10;
char v11;
int v12;
unsigned __int8 v13;
unsigned __int8 v14;
unsigned int v15;
bool v16;
int v17;
unsigned int v18;
int v19;
char v20;
char v21;
char v22;
unsigned __int8 v23;
__int16 v24;
if( !PpmIsParkingEnabled )
return 1;
v1 = 2736i64 * *(&stru_140C23628 + 441);
v2 = *(_BYTE *)(v1 + *(&stru_140C00F40 + 365) + 166);
v3 = *(_DWORD *)(v1 + *(&stru_140C00F40 + 365) + 176);
v4 = *(_DWORD *)(v1 + *(&stru_140C00F40 + 365) + 172);
v21 = *(_BYTE *)(v1 + *(&stru_140C00F40 + 365) + 169);
v22 = *(_BYTE *)(v1 + *(&stru_140C00F40 + 365) + 168);
v23 = v2;
if( *(&PopIrpWorkerControlEvent + 313) == 5 )
{
v4 = 0;
v3 = 0;
}
v5 = 0;
v24 = 0;
if( !(_DWORD)PpmParkNumNodes )
return 1;
do
{
v6 = PpmParkNodes + 272i64 * v5;
if( (*(_BYTE *)(v6 + 146) & 1) != 0 )
goto LABEL_52;
++*(_DWORD *)v6;
v7 = 0;
v8 = *(_DWORD *)v6;
v9 = 0i64;
do
{
v10 = *(unsigned __int8 *)(v9 + v6 + 128);
if( !(_BYTE)v10 || ((unsigned __int8)(1 << (v7 + 1)) & *(_BYTE *)(v6 + 146)) != 0 )
goto LABEL_50;
v11 = PpmParkUnparkCores;
v12 = (unsigned __int8)PpmParkGranularity;
v13 = *(_BYTE *)(v6 + 140);
v14 = PpmParkGranularity;
if( PpmParkUnparkCores )
v14 = 1;
if( (!PpmParkUnparkCores || PpmParkGranularity == 1) && v13 < (unsigned __int8)v10 && *(_BYTE *)(v6 + 141) > v2 )
++v13;
v15 = *(unsigned __int8 *)(v9 + v6 + 138);
if( PpmParkUnparkCores )
v15 /= (unsigned __int8)PpmParkGranularity;
v16 = (unsigned __int8)v15 <= v13;
if( (unsigned __int8)v15 < v13 )
{
if( (unsigned __int8)v15 < (unsigned __int8)v10 && v8 >= v3 )
{
*(_DWORD *)v6 = 0;
if( v21 )
{
switch( v21 )
{
case 1:
LOBYTE(v15) = v14 + v15;
break;
case 2:
LOBYTE(v15) = v10;
break;
case 3:
v17 = *(unsigned __int8 *)(v6 + 145);
v18 = v17 + (unsigned __int8)v15;
LOBYTE(v15) = v15 + v17;
if( v18 >= v10 )
LOBYTE(v15) = v10;
break;
}
goto LABEL_45;
}
goto LABEL_44;
}
v16 = (unsigned __int8)v15 <= v13;
}
if( v16 || (unsigned __int8)v15 <= v14 || v8 < v4 )
goto LABEL_45;
*(_DWORD *)v6 = 0;
if( v22 )
{
switch( v22 )
{
case 1:
LOBYTE(v15) = v15 - v14;
break;
case 2:
LOBYTE(v15) = v14;
break;
case 3:
v19 = *(unsigned __int8 *)(v6 + 145);
if( (unsigned __int8)v15 <= (unsigned int)(v19 + v12) )
LOBYTE(v15) = v12;
else
LOBYTE(v15) = v15 - v19;
break;
}
goto LABEL_45;
}
LABEL_44:
LOBYTE(v15) = v13;
LABEL_45:
v20 = v15;
if( (unsigned __int8)v15 >= (unsigned __int8)v10 )
v20 = v10;
if( v11 )
v20 *= (_BYTE)v12;
v2 = v23;
*(_BYTE *)(v9 + v6 + 138) = v20;
LABEL_50:
++v7;
++v9;
}
while( v7 < 2u );
v5 = v24;
LABEL_52:
v24 = ++v5;
}
while( v5 < (unsigned int)PpmParkNumNodes );
return 1;
}Referenced by:
PpmCheckComputeHeteroResponse