RtlCSparseBitmapBitsClear

NTSTATUS __stdcall RtlCSparseBitmapBitsClear(INT64 a1, UINT64 a2, INT64 a3){
  void **v3; 
  UINT64 v7; 
  __int64 v8; 
  __int64 v9; 
  __int64 v10; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  volatile signed __int32 *v13; 
  UINT64 v14; 
  UINT64 v15; 
  __int64 *v16; 
  __int64 *v17; 
  __int64 v18; 
  __int64 *i; 
  __int64 v20; 
  bool v21; 
  int v22; 
  __int64 v23; 
  __int64 v25; 
  unsigned __int64 v26; 
  void *retaddr; 
  INT64 v28; 

  v3 = &retaddr;
  while( a3 )
  {
    v7 = a2 & 0x7FFF;
    v8 = a3;
    v28 = a3;
    v9 = v7 + a3;
    if( a3 < 0 )
    {
      v8 = ~v7;
      if( v9 >= 0 )
        v8 = a3;
    }
    else
    {
      if( v9 <= 0x8000 )
        goto LABEL_5;
      v8 = 0x8000 - v7;
    }
    v28 = v8;
LABEL_5:
    v10 = v8;
    v25 = v8;
    v11 = a2 >> 15;
    if( _bittest64((const signed __int64 *)(a1 + 56), a2 >> 30) )
    {
      v3 = *(void ***)a1;
      if( !_bittest64(*(const signed __int64 **)a1, v11) )
        goto LABEL_36;
      v26 = *(_QWORD *)(a1 + 8) + (v11 << 12);
      v12 = v8;
      v13 = (volatile signed __int32 *)(v26 + 4 * (v7 >> 5));
      v14 = a2 & 0x1F;
      if( v14 + v8 <= 0x20 )
      {
        if( v8 == 32 )
        {
          *v13 = 0;
          goto LABEL_13;
        }
        v22 = ~(((1 << v8) - 1) << v14);
      }
      else
      {
        if( (a2 & 0x1F) != 0 )
        {
          _InterlockedAnd(v13, ~(((1 << (32 - (a2 & 0x1F))) - 1) << v14));
          v8 = v28;
          v12 = v28 - (32 - (unsigned int)(a2 & 0x1F));
          ++v13;
        }
        while( v12 >= 0x20 )
        {
          *v13++ = 0;
          v12 -= 32i64;
        }
        if( !v12 )
        {
LABEL_13:
          if( v8 >= 512 )
          {
            LODWORD(v3) = 1;
          }
          else
          {
            v15 = a2 & 0x7E00;
            if( 0x8000 - v15 < 0x200 )
            {
              LODWORD(v3) = 0;
            }
            else
            {
              v16 = (__int64 *)(v26 + 8 * (v15 >> 6));
              v17 = (__int64 *)(v26 + 8 * ((v15 + 511) >> 6));
              v18 = *v16;
              if( v16 == v17 )
              {
                v21 = v18 == 0;
                goto LABEL_22;
              }
              if( v18 )
              {
LABEL_25:
                LODWORD(v3) = 0;
              }
              else
              {
                for( i = v16 + 1; ; ++i )
                {
                  v20 = *i;
                  if( i == v17 )
                    break;
                  if( v20 )
                    goto LABEL_25;
                }
                v21 = v20 == 0;
LABEL_22:
                LODWORD(v3) = v21;
              }
              v10 = v25;
            }
            v8 = v28;
          }
          if( (_DWORD)v3 )
            LODWORD(v3) = RtlpCSparseBitmapPageDecommit(a1, a2 >> 15, v10 == 0x8000);
          goto LABEL_36;
        }
        v22 = -1 << v12;
      }
      _InterlockedAnd(v13, v22);
      v8 = v28;
      goto LABEL_13;
    }
    v3 = (void **)(a2 & 0x3FFFFFFF);
    v8 = a3;
    v23 = (__int64)v3 + a3;
    if( a3 >= 0 )
    {
      if( v23 > 0x40000000 )
        v8 = 0x40000000i64 - (_QWORD)v3;
    }
    else
    {
      v8 = ~(unsigned __int64)(unsigned int)v3;
      if( v23 >= 0 )
        v8 = a3;
    }
LABEL_36:
    a2 += v8;
    a3 -= v8;
  }
  return(int)v3;
}

Referenced by:

RtlCSparseBitmapBitmaskWrite
RtlpHpSegSegmentFree
RtlpHpVaMgrRangeCleanup
RtlpHpVaMgrRangeCreate