EmonReserveProfileResources
INT64 __fastcall EmonReserveProfileResources(__int64 a1, unsigned int *a2, _QWORD *a3){
INT64 v3;
INT64 v5;
__int64 v6;
unsigned int v7;
__int64 v8;
unsigned int v9;
unsigned int *v10;
int v11;
int v12;
int v13;
unsigned int v14;
*a3 = -1i64;
v3 = 0i64;
v5 = 0i64;
v6 = (1i64 << EmonNumberArchCounters) - 1;
if( a2 )
{
v7 = *a2;
v8 = 0i64;
v9 = 0;
if( *a2 )
{
v10 = a2 + 4;
do
{
v11 = *(v10 - 2);
if( v11 )
{
v12 = v11 - 1;
if( v12 )
{
v13 = v12 - 2;
if( v13 )
{
if( v13 != 1 || !EmonPebsAvailable )
return 3221225659i64;
if( !EmonPebsEntrySize && !v10[2] || !v10[3] )
return 3221225485i64;
v5 = (INT64)v10;
}
else
{
if( (unsigned int)EmonVersion < 2 )
return 3221225659i64;
if( v3 )
return 3221225485i64;
v3 = *(_QWORD *)v10;
}
}
else
{
v14 = v10[1];
if( v14 > 0x40 || v14 < *v10 )
return 3221225485i64;
v8 |= ((1i64 << ((unsigned __int8)v14 - (unsigned __int8)*v10 + 1)) - 1) << *v10;
}
}
else
{
if( *v10 > 0x40 )
return 3221225485i64;
v8 |= 1i64 << *v10;
}
++v9;
v10 += 6;
}
while( v9 < v7 );
}
}
else
{
v8 = v6 | (((1i64 << EmonNumberFixedCounters) - 1) << 32);
}
if( (v8 & (v6 | (((1i64 << EmonNumberFixedCounters) - 1) << 32))) == v8 )
return EmonAllocateResources(v8, v3, a1, v5, (INT64)a3);
else
return 3221225485i64;
}Referenced by:
No references.