HalpDmaForceAllocation
__int64 __fastcall HalpDmaForceAllocation(__int64 a1, __int64 *a2, __int64 **a3, int a4, char a5, _DWORD *a6){
__int64 *v6;
__int64 v8;
int v9;
unsigned int v10;
__int64 result;
unsigned int v12;
char i;
__int64 v14;
unsigned int v15;
__int64 j;
int v17;
__int64 v18;
v6 = *a3;
if( !*a3 )
{
if( *((_DWORD *)a3 + 2) == -1 )
{
v8 = 0i64;
v9 = 0;
v10 = 0;
goto LABEL_4;
}
*((_DWORD *)a3 + 2) = 0;
v6 = a2;
*a3 = a2;
}
v12 = *((_DWORD *)a3 + 2);
v10 = 0;
for( i = 1; ; i = 0 )
{
v14 = 0i64;
v8 = 0i64;
v9 = 0;
while( v6 )
{
v15 = *((_DWORD *)v6 + 2);
v10 = v12;
for( j = v6[2] + 72i64 * v12; v10 < v15; ++v10 )
{
if( (*(_QWORD *)(j + 48) & 0xFFFFFFFFFFFFF000ui64) != 0 )
{
if( v8 )
*(_QWORD *)(v14 + 8) = j;
else
v8 = j;
++v9;
v14 = j;
if( v9 == a4 )
goto LABEL_4;
}
else
{
v17 = 0;
if( !a5 )
v17 = v9;
v9 = v17;
v18 = 0i64;
if( !a5 )
v18 = v8;
v8 = v18;
}
j += 72i64;
}
v6 = (__int64 *)*v6;
v12 = 0;
}
if( !a5 )
break;
if( !i || *a3 == a2 && !*((_DWORD *)a3 + 2) )
{
*((_DWORD *)a3 + 2) = 0;
result = 0i64;
*a3 = a2;
return result;
}
v12 = 0;
v6 = a2;
}
LABEL_4:
*a3 = v6;
*((_DWORD *)a3 + 2) = v10;
if( v6 )
goto LABEL_7;
if( !a5 )
{
*((_DWORD *)a3 + 2) = -1;
LABEL_7:
if( !a5 )
*a6 = v9;
}
return v8;
}Referenced by:
HalpDmaAllocateMapRegistersAtHighLevel