ArbGetNextAllocationRange
char __fastcall ArbGetNextAllocationRange(__int64 a1, __int64 a2){
unsigned __int64 v2;
unsigned int v5;
unsigned __int64 i;
unsigned __int64 v7;
unsigned __int64 v8;
int v9;
unsigned __int64 v10;
unsigned __int64 v11;
unsigned __int64 v12;
unsigned int v13;
unsigned __int64 *v14;
unsigned __int64 v15;
unsigned __int64 v16;
__int64 v17;
__int64 v18;
unsigned __int64 v19;
char result;
v2 = *(_QWORD *)(a2 + 40);
while( 1 )
{
if( v2 )
{
ArbpUpdatePriority(a1, (__int64 *)v2);
v2 = *(_QWORD *)(a2 + 56);
v5 = *(_DWORD *)(a2 + 48);
}
else
{
v2 = *(_QWORD *)(a2 + 56);
v5 = *(_DWORD *)(a2 + 48);
for( i = v2; i < v2 + ((unsigned __int64)v5 << 6); v2 = *(_QWORD *)(a2 + 56) )
{
*(_DWORD *)(i + 32) = 0;
ArbpUpdatePriority(a1, (__int64 *)i);
v5 = *(_DWORD *)(a2 + 48);
i += 64i64;
}
}
v7 = v2 + 64;
v8 = v2 + ((v5 - 1 + 1i64) << 6);
while( v7 < v8 )
{
if( *(_DWORD *)(v7 + 32) < *(_DWORD *)(v2 + 32) )
v2 = v7;
v7 += 64i64;
}
v9 = *(_DWORD *)(v2 + 32);
if( v9 == 0x7FFFFFFF )
return 0;
v10 = *(_QWORD *)(v2 + 8);
v11 = *(_QWORD *)v2;
v12 = v10;
if( (unsigned int)(v9 - 2147483645) <= 1 )
{
v17 = *(_QWORD *)v2;
}
else
{
v13 = v9 - 1;
if( v9 <= 0 )
v13 = ~v9;
v14 = (unsigned __int64 *)(*(_QWORD *)(a1 + 64) + 16i64 * v13);
v15 = v14[1];
v16 = *v14;
v17 = *(_QWORD *)v2;
if( v11 <= v16 )
v17 = v16;
if( v10 >= v15 )
v12 = v15;
}
v18 = *(_QWORD *)(v2 + 16);
if( v18 )
{
v19 = *(_QWORD *)(v2 + 24);
v11 = v19 + v17 - 1 - (v19 + v17 - 1) % v19;
if( v18 - 1 <= v12 - v11 )
{
v10 = v12 - (1 - v18 + v12) % v19;
goto LABEL_18;
}
*(_QWORD *)(a2 + 40) = v2;
}
else
{
LABEL_18:
if( v11 != *(_QWORD *)(a2 + 16) || v10 != *(_QWORD *)(a2 + 24) || *(_QWORD *)(a2 + 40) != v2 )
{
*(_QWORD *)(a2 + 16) = v11;
result = 1;
*(_QWORD *)(a2 + 24) = v10;
*(_QWORD *)(a2 + 40) = v2;
return result;
}
v2 = *(_QWORD *)(a2 + 40);
}
}
}Referenced by:
No references.