AlpcpAllocateFromBitmap

UINT64 __stdcall AlpcpAllocateFromBitmap(UINT64 *Start, UINT64 *Limit, UINT64 Size){
  unsigned int v3; 
  int v4; 
  UINT64 v7; 
  UINT64 *v8; 
  unsigned int v9; 
  unsigned int i; 
  signed __int32 *v11; 
  int v12; 
  int v13; 
  signed __int32 v14; 
  signed __int32 v15; 
  unsigned int v17; 
  int v18; 
  signed __int32 v19; 
  signed __int32 v20; 
  signed __int32 v21; 
  unsigned int v22; 
  v3 = 0;
  v4 = Size;
  v7 = 0xFFFFFFFFi64;
  v8 = Start;
  if( Start != Limit )
  {
    while( 2 )
    {
      v9 = *(_DWORD *)v8;
      for( i = 0; i < 0x20; ++i )
      {
        if( (v9 & 1) != 0 )
        {
          v7 = 0xFFFFFFFFi64;
          v3 = 0;
        }
        else
        {
          if( (_DWORD)v7 == -1 )
            v7 = i + 32 * (unsigned int)(((char *)v8 - (char *)Start) >> 2);
          if( ++v3 == v4 )
          {
            v11 = (signed __int32 *)Start + ((unsigned __int64)(unsigned int)v7 >> 5);
            v12 = v7 & 0x1F;
            if( (v7 & 0x1F) != 0 )
            {
              v17 = v3;
              if( v3 >= 32 - v12 )
                v17 = 32 - v12;
              v18 = ((1 << v17) - 1) << v12;
              _m_prefetchw(v11);
              v19 = *v11;
              while( (v19 & v18) == 0 )
              {
                v20 = v19;
                v19 = _InterlockedCompareExchange(v11, v18 | v19, v19);
                if( v20 == v19 )
                {
                  v3 -= v17;
LABEL_23:
                  ++v11;
                  goto LABEL_10;
                }
              }
            }
            else
            {
LABEL_10:
              if( v3 >= 0x20 )
              {
                _m_prefetchw(v11);
                v21 = *v11;
                while( !v21 )
                {
                  v21 = _InterlockedCompareExchange(v11, -1, 0);
                  if( !v21 )
                  {
                    v3 -= 32;
                    goto LABEL_23;
                  }
                }
              }
              else
              {
                if( !v3 )
                  return(unsigned int)v7;
                v13 = (1 << v3) - 1;
                _m_prefetchw(v11);
                v14 = *v11;
                while( (v14 & v13) == 0 )
                {
                  v15 = v14;
                  v14 = _InterlockedCompareExchange(v11, v13 | v14, v14);
                  if( v15 == v14 )
                    return(unsigned int)v7;
                }
              }
              v22 = v4 - v3;
              if( v22 )
                AlpcpFreeBitmap(Start, (UINT64)v11, v7, v22);
            }
            return 4294967294i64;
          }
        }
        v9 >>= 1;
      }
      v8 = (UINT64 *)((char *)v8 + 4);
      if( v8 != Limit )
        continue;
      break;
    }
  }
  return 0xFFFFFFFFi64;
}

Referenced by:

AlpcpAllocateCompletionBuffer