HalpLapSplitNode

INT64 __fastcall HalpLapSplitNode(INT64 a1, INT64 a2){
  __int64 v4; 
  __int64 v5; 
  __int64 v6; 
  INT64 result; 
  unsigned __int64 v8; 
  unsigned __int64 v9; 
  v5 = HalpMmAllocCtxAlloc(a1, 80i64);
  if( !v5 )
    return 3221225626i64;
  ++*(_DWORD *)(a1 + 24);
  v6 = HalpMmAllocCtxAlloc(v4, 80i64);
  if( !v6 )
  {
    HalpMmAllocCtxFree(0i64, v5);
    --*(_DWORD *)(a1 + 24);
    return 3221225626i64;
  }
  ++*(_DWORD *)(a1 + 24);
  *(_QWORD *)(v5 + 24) = 0i64;
  *(_QWORD *)(v5 + 32) = 0i64;
  *(_QWORD *)(v5 + 16) = a2;
  *(_QWORD *)(v5 + 48) = *(_QWORD *)(a2 + 48);
  *(_BYTE *)(v5 + 56) = 0;
  v8 = *(_QWORD *)(a2 + 64);
  *(_QWORD *)(v5 + 72) = 0i64;
  *(_QWORD *)(v5 + 40) = 0i64;
  *(_QWORD *)(v5 + 8) = v5;
  *(_QWORD *)v5 = v5;
  *(_QWORD *)(v5 + 64) = v8 >> 1;
  *(_QWORD *)(v6 + 24) = 0i64;
  *(_QWORD *)(v6 + 32) = 0i64;
  *(_QWORD *)(v6 + 16) = a2;
  *(_QWORD *)(v6 + 48) = *(_QWORD *)(a2 + 48) + (*(_QWORD *)(a2 + 64) >> 1);
  *(_BYTE *)(v6 + 56) = 0;
  v9 = *(_QWORD *)(a2 + 64);
  *(_QWORD *)(v6 + 72) = 0i64;
  *(_QWORD *)(v6 + 40) = 0i64;
  *(_QWORD *)(v6 + 8) = v6;
  *(_QWORD *)v6 = v6;
  *(_QWORD *)(v6 + 64) = v9 >> 1;
  result = 0i64;
  *(_BYTE *)(a2 + 56) = 1;
  *(_QWORD *)(a2 + 24) = v5;
  *(_QWORD *)(a2 + 32) = v6;
  return result;
}

Referenced by:

HalpLaAllocateBlt
HalpLaReserveRange