RtlpHpVsChunkCoalesce
UINT64 __stdcall RtlpHpVsChunkCoalesce(INT64 a1, INT64 a2, UINT64 a3, UINT64 *a4){
UINT64 v4;
__int64 v6;
unsigned int v7;
UINT64 v8;
__int64 v9;
unsigned int v10;
unsigned int v11;
__int64 v12;
unsigned int v13;
bool v14;
INT64 v15;
unsigned __int64 v16;
__int64 v17;
int v18;
unsigned int v19;
unsigned int v20;
__int64 v21;
unsigned int v22;
unsigned __int64 v23;
__int64 v24;
unsigned __int64 v25;
INT64 v27;
v27 = a1;
v4 = a3;
v6 = a3 ^ RtlpHpHeapGlobals ^ *(_QWORD *)a3;
v7 = WORD1(v6);
*(_BYTE *)(a3 + 6) = BYTE6(a3) ^ BYTE6(RtlpHpHeapGlobals);
if( WORD2(v6) )
{
v8 = a3 - 16i64 * WORD2(v6);
v9 = RtlpHpHeapGlobals ^ v8 ^ *(_QWORD *)v8;
if( (v9 & 0xFF000000000000i64) == 0 )
{
RtlRbRemoveNode((UINT64 *)(a1 + 16), v8 + 8);
v10 = RtlpHpHeapGlobals ^ v8 ^ *(_DWORD *)v8;
v11 = (v8 - a2 + 4127) & 0xFFFFF000;
v4 = v8;
v12 = 16 * HIWORD(v10);
v13 = ((v8 + v12 - a2) & 0xFFFFF000) - v11;
v14 = v11 < (((_DWORD)v8 + (_DWORD)v12 - (_DWORD)a2) & 0xFFFFF000);
a1 = v27;
if( !v14 )
v13 = 0;
*(_QWORD *)(v27 + 56) -= (unsigned int)(((v8 & 0xFFF) + v12 + 4095) >> 12)
+ (v13 >> 12)
- (unsigned int)((unsigned __int64)(v12 + 4095) >> 12)
- (unsigned __int16)v10;
v7 += WORD1(v9);
}
}
v15 = a2 + 48;
v16 = v4 + 16i64 * v7;
if( v16 < a2 + 48 + 16 * (unsigned __int64)*(unsigned __int16 *)(a2 + 32) )
{
v17 = RtlpHpHeapGlobals ^ *(_QWORD *)v16 ^ v16;
if( (v17 & 0xFF000000000000i64) == 0 )
{
RtlRbRemoveNode((UINT64 *)(a1 + 16), v16 + 8);
v18 = v4 + 16 * v7;
v19 = RtlpHpHeapGlobals ^ *(_DWORD *)v16 ^ v16;
v20 = (v18 - a2 + 4127) & 0xFFFFF000;
v21 = 16 * HIWORD(v19);
v22 = ((v18 + v21 - a2) & 0xFFFFF000) - v20;
v14 = v20 < ((v18 + (_DWORD)v21 - (_DWORD)a2) & 0xFFFFF000);
a1 = v27;
if( !v14 )
v22 = 0;
*(_QWORD *)(v27 + 56) -= (unsigned int)(((unsigned __int64)(v18 & 0xFFF) + v21 + 4095) >> 12)
+ (v22 >> 12)
- (unsigned int)((unsigned __int64)(v21 + 4095) >> 12)
- (unsigned __int16)v19;
v7 += WORD1(v17);
}
}
if( (*(_DWORD *)(a1 + 176) & 1) != 0 )
{
v23 = v4 + 16i64 * v7;
if( v23 < v15 + 16 * (unsigned __int64)*(unsigned __int16 *)(a2 + 32) )
{
v24 = RtlpHpHeapGlobals ^ *(_QWORD *)v23 ^ v23;
if( (v24 & 0xFF000000000000i64) == 0 )
{
RtlpHpVsFreeChunkRemove(a1, a2, v23);
v7 += WORD1(v24);
}
}
}
if( WORD1(v6) != v7 )
{
v25 = v4 + 16i64 * v7;
*(_WORD *)(v4 + 2) = WORD1(RtlpHpHeapGlobals) ^ v7 ^ WORD1(v4);
if( v25 < v15 + 16 * (unsigned __int64)*(unsigned __int16 *)(a2 + 32) )
*(_WORD *)(v25 + 4) = WORD2(RtlpHpHeapGlobals) ^ v7 ^ WORD2(v25);
}
*(_DWORD *)a4 = v7;
return v4;
}Referenced by:
RtlpHpVsChunkFree
RtlpHpVsContextFree