SmHpChunkAlloc

_WORD *__fastcall SmHpChunkAlloc(UINT64 *a1){
  CHAR v1; 
  unsigned int v2; 
  _WORD *v4; 
  unsigned int v6; 
  UINT64 v7; 
  __int64 v8; 
  __int64 v9; 
  UINT64 v10; 
  __int64 v12; 
  v2 = *((_DWORD *)a1 + 71);
  v4 = 0i64;
  while( !_BitScanForward(&v6, v2) )
  {
    SmHpBufferAlloc(a1, v1);
    if( !v12 )
      return v4;
    v2 = *((_DWORD *)a1 + 71);
  }
  v7 = a1[2 * v6 + 36];
  v8 = *(unsigned int *)(v7 + 16);
  _BitScanReverse((unsigned int *)&v9, v8);
  v10 = a1[v9] + 16 * (v8 ^ (unsigned int)(1 << v9));
  v4 = (_WORD *)(v7 + *(unsigned __int16 *)(v10 + 8));
  *(_WORD *)(v10 + 8) = *v4;
  SmHpBufferUpdateFullness(a1, v10, 0xFFFFFFFFi64);
  ++*((_DWORD *)a1 + 141);
  return v4;
}

Referenced by:

ST_STORE::StDmpDummyPageRecordAllocate
ST_STORE::StDmpSinglePageAdd