RtlpHpVsChunkDecommit

INT64 __fastcall RtlpHpVsChunkDecommit(INT64 *SpinLock, INT64 a2, INT64 a3, CHAR a4, INT64 a5){
  unsigned int v9; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  int v13; 
  INT64 v14; 
  UINT64 v15; 
  __int64 v16[4]; 
  LODWORD(v15) = 0;
  v16[0] = 0i64;
  v9 = 0;
  RtlpHpVsChunkComputeCost(a3, a2, &v15, (UINT64 *)v16);
  if( (_DWORD)v15 )
  {
    if( v16[0] )
    {
      v11 = (0x101010101010101i64
           * ((((v16[0] - (((unsigned __int64)v16[0] >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
             + (((v16[0] - (((unsigned __int64)v16[0] >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)
             + ((((v16[0] - (((unsigned __int64)v16[0] >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
               + (((v16[0] - (((unsigned __int64)v16[0] >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)) >> 4)) & 0xF0F0F0F0F0F0F0Fi64)) >> 56;
      if( *(__int16 *)(a2 + 34) >= 0 )
      {
        if( (SpinLock[22] & 2) != 0 )
          goto LABEL_9;
        v12 = (unsigned __int64)SpinLock[6] >> 7;
        if( v12 <= 8 )
          v12 = 8i64;
        if( SpinLock[7] + (unsigned __int64)(unsigned int)v11 > v12 )
        {
LABEL_9:
          v9 = 1;
          v15 = 0x1000000000000i64;
          *(_BYTE *)(a3 + 6) = BYTE6(a3) ^ BYTE6(RtlpHpHeapGlobals) ^ 1;
          *(_DWORD *)(a3 + 8) = (unsigned __int8)(RtlpHpHeapGlobals ^ a3 ^ ((unsigned int)(a3 - a2) >> 12)) | 0x200;
          v13 = a4 & 1;
          if( !v13 )
            RtlpHpReleaseQueuedLockExclusive(*((unsigned int *)SpinLock + 2), a5);
          LODWORD(v14) = 0;
          RtlpHpVsSubsegmentCommitPages((INT64)SpinLock, a2, v16[0], (unsigned int)v11, v14);
          if( !v13 )
            RtlpHpAcquireQueuedLockExclusive((INT8)SpinLock, (UINT64 *)*((unsigned int *)SpinLock + 2));
          *(_DWORD *)(a3 + 8) &= ~0x200u;
        }
      }
    }
  }
  return v9;
}

Referenced by:

RtlpHpVsChunkFree