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