ExpInsertLowLevelTableIntoFreeList

VOID __stdcall ExpInsertLowLevelTableIntoFreeList(
        _HANDLE_TABLE *HandleTable,
        _HANDLE_TABLE_ENTRY *NewLowLevel,
        _HANDLE_TABLE_FREE_LIST *FreeList,
        UINT8 DoInit){
  __m128i v5; 
  _HANDLE_TABLE_ENTRY *v7; 
  unsigned int v8; 
  __int64 *p_HighValue; 
  unsigned __int64 v10; 
  __m128i v11; 
  unsigned int v12; 
  __m128i v13; 
  _HANDLE_TABLE_ENTRY *v14; 
  __m128i v15; 

  v5 = _mm_unpacklo_epi64((__m128i)(unsigned __int64)NewLowLevel, (__m128i)(unsigned __int64)NewLowLevel);
  if( DoInit )
  {
    v8 = 1;
    p_HighValue = &NewLowLevel[1].HighValue;
    v10 = _mm_srli_si128((__m128i)0i64, 8).m128i_u64[0];
    v11 = _mm_cvtsi32_si128(4u);
    do
    {
      v12 = v8 + 1;
      v15.m128i_i64[0] = _xmm;
      v8 += 2;
      *(p_HighValue - 1) = 0i64;
      p_HighValue[1] = v10;
      v13 = _mm_add_epi64(
              _mm_sll_epi64(
                _mm_unpacklo_epi32(_mm_add_epi32(_mm_shuffle_epi32(_mm_cvtsi32_si128(v12), 0), v15), (__m128i)0i64),
                v11),
              v5);
      *p_HighValue = v13.m128i_i64[0];
      p_HighValue += 4;
      *(p_HighValue - 2) = _mm_srli_si128(v13, 8).m128i_u64[0];
    }
    while( v8 < 0xFF );
    v7 = NewLowLevel + 255;
    NewLowLevel[255].LowValue = 0i64;
    NewLowLevel[255].HighValue = 0i64;
  }
  else
  {
    v7 = NewLowLevel + 255;
  }
  _InterlockedExchangeAdd((volatile signed __int32 *)HandleTable, 0x400u);
  if( DoInit )
  {
    ExAcquirePushLockExclusiveEx(&FreeList->FreeListLock, 0i64);
    v14 = NewLowLevel + 1;
    if( FreeList->FirstFreeHandleEntry )
      FreeList->LastFreeHandleEntry->HighValue = (__int64)v14;
    else
      FreeList->FirstFreeHandleEntry = v14;
    FreeList->LastFreeHandleEntry = v7;
    if( (_InterlockedExchangeAdd64(&FreeList->FreeListLock._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock(&FreeList->FreeListLock);
    KeAbPostRelease(FreeList);
  }
}

Referenced by:

ExpAllocateHandleTable
ExpAllocateHandleTableEntrySlow