SmHpChunkFree

INT64 __fastcall SmHpChunkFree(_DWORD *a1, UINT64 a2){
  __int64 v3; 
  __int64 v4; 
  _WORD *v5; 
  INT64 result; 
  int v7; 
  v3 = *(unsigned int *)((a2 & 0xFFFFFFFFFFFFF000ui64) + 0x10);
  _BitScanReverse((unsigned int *)&v4, v3);
  v5 = (_WORD *)(*(_QWORD *)&a1[2 * v4] + 16 * (v3 ^ (unsigned int)(1 << v4)));
  *(_WORD *)a2 = v5[4];
  v5[4] = a2 - *v5;
  result = SmHpBufferUpdateFullness(a1, v5, 1i64);
  v7 = (unsigned __int16)v5[5];
  if( v7 == a1[137] )
  {
    result = (unsigned int)(a1[140] - v7);
    if( (unsigned int)result >= a1[139] )
      result = SmHpBufferCleanup((INT64)a1, v5);
  }
  --a1[141];
  return result;
}

Referenced by:

ST_STORE::StDmCleanup
ST_STORE::StDmCombinePageEntry
ST_STORE::StDmPageRemove
ST_STORE::StDmpSinglePageAdd