SmHpChunkHeapInitialize
UINT64 __fastcall SmHpChunkHeapInitialize(INT64 a1, INT64 a2){
_QWORD *v4;
__int64 v5;
int v6;
int v7;
unsigned int v8;
int v9;
int v10;
unsigned int v11;
unsigned int v12;
UINT64 result;
memset(a1, 0i64);
*(_QWORD *)(a1 + 272) = *(_QWORD *)a2;
v4 = (_QWORD *)(a1 + 288);
*(_DWORD *)(a1 + 256) = 1;
v5 = 16i64;
do
{
v4[1] = v4;
*v4 = v4;
v4 += 2;
--v5;
}
while( v5 );
v6 = *(_DWORD *)(a2 + 4);
*(_DWORD *)(a1 + 544) = -1;
v7 = -v6 & (v6 + 23);
v8 = (unsigned int)(4096 - v7) / *(_DWORD *)a2;
*(_DWORD *)(a1 + 548) = v8;
_BitScanReverse(&v8, v8);
*(_DWORD *)(a1 + 264) = v8;
v9 = *(_DWORD *)(a1 + 548);
if( !v9 || ((v9 - 1) & v9) != 0 )
++*(_DWORD *)(a1 + 264);
v10 = *(_DWORD *)(a1 + 264);
v11 = 0xFFFFFFFF >> v10;
*(_DWORD *)(a1 + 268) = (1 << v10) - 1;
v12 = (unsigned int)(v9 + 15) >> 4;
_BitScanReverse((unsigned int *)&result, v12);
*(_DWORD *)(a1 + 260) = v11;
*(_DWORD *)(a1 + 280) = v7;
*(_DWORD *)(a1 + 556) = v9;
*(_DWORD *)(a1 + 552) = result;
if( !v12 || (result = v12 - 1, ((unsigned int)result & v12) != 0) )
++*(_DWORD *)(a1 + 552);
return result;
}Referenced by:
ST_STORE::StDmCleanup
ST_STORE::StDmInitialize
ST_STORE::StDmStart