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